CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( h/ ?4 E/ J! l! z- {" ]* q
  1. / RevApp.cpp : Defines the class behaviors for the application.& H7 U+ \) f) H# [6 D: k; N+ ?
  2. //8 g! N: _6 K; P
  3. + ?" h$ |, c2 i' X& Z
  4. #include "stdafx.h"1 o1 {' L0 _  i- O  o& @

  5. * u& U  f# B( Z6 m
  6. //#define UNICODE
      g7 q  }  C0 a
  7. //#include <gdiplus.h>  u9 h1 H7 c- h2 B
  8. //using namespace Gdiplus;
    4 m( ?5 H+ W  z1 o3 k: T

  9. % |  Q2 D& [, w  y# {( Y; K3 a
  10. #include "RevApp.h"
    / a+ t/ ^( ^- p0 }3 J) b, P
  11. #include "RevAppDlg.h"
    5 v* v2 n) P+ l/ B3 R$ `' Z8 G9 b

  12. # J( @7 N, h5 T8 ?) m
  13. #pragma warning(disable:4786)
    # W: O1 [2 Z) L. P, K- C: P, I
  14. #include <map>2 U$ W; ]7 C( ~+ H2 |
  15. #include <list>5 k0 m. B) i) R  ], C
  16. #include <direct.h>, S. {7 e* L4 W4 s0 ~. u
  17. - j; H$ s8 e% o  F) E: R* y
  18. #ifdef _DEBUG
    # Y" _% j  e! A
  19. #define new DEBUG_NEW
    / d- y4 B! ]" O( T+ n" E& b
  20. #undef THIS_FILE  T9 Q; |1 t9 Q, v
  21. static char THIS_FILE[] = __FILE__;
    0 b0 a4 ^8 \+ v' [4 \2 d
  22. #endif
    $ H7 i( x5 e# i1 x+ a
  23. #include "SkinResDef.h"# ^5 s* P$ N: H8 g0 g$ q: B- k
  24. #include "ChangeBG.h"
    6 y) R; W/ z6 T: y1 p
  25. #include "AFXINET.H"8 ~5 ^/ O% j2 F3 h* \7 }
  26. 0 v" P& X' H2 s
  27. #define TRADITIONAL_CHINESE 0" {  P! a3 u7 D. g3 j2 M/ k3 q3 A
  28. #define SIMPLIFY_CHINESE 1
    ; ~7 {' h6 c: p- k) `) R% T
  29. #define ENGLISH 26 X% |/ a& B) b6 D, k; ~
  30. int m_iLanguage = ENGLISH;  }# @$ M2 m4 j; j; C5 j6 Q
  31. /////////////////////////////////////////////////////////////////////////////; C- p, B/ s# z
  32. // CRevAppApp
    ! ^% e) @1 Y& {
  33. $ P: b! i9 E& N, i* e5 G! k- Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 N0 ]' o5 S, O. S# G5 ?0 H
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 k6 m4 I4 V9 a" l- A; o$ g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 P1 u/ S3 |7 Q" M. |+ X: i2 V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 f6 |( s" G( t6 {1 L, r- {
  38.         //}}AFX_MSG/ @, |1 _" i( V7 {1 e3 B! f; I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 l3 d8 ?" B2 ^- [2 ?& s& ?
  40. END_MESSAGE_MAP()
    1 }/ a. c) r$ J! x- z0 Y* r

  41. ( [9 t7 O, U7 k. d9 w/ g
  42. /////////////////////////////////////////////////////////////////////////////+ Z! |) K7 v$ b
  43. // CRevAppApp construction- M4 P; T) I! p: v8 N# e, N

  44. 2 m2 ^3 K2 Z5 g: q) ]+ \, h! q
  45. CRevAppApp::CRevAppApp()  ?6 p' B/ \  L. W' X
  46. {) p, ?, a4 K$ c3 y& a5 g7 ?
  47.         // TODO: add construction code here,7 D3 o% D& Y/ W* D1 W! S
  48.         // Place all significant initialization in InitInstance
    " r, ^7 P; F; J+ i
  49.   bDisplayIsBig5=FALSE;/ E$ u- Z' K4 j) [( ^6 O
  50.   bRestartUpdater=FALSE;
    4 v/ n/ z0 h' n2 F4 T
  51.   bFinishUpdated=FALSE;5 J0 q# m& q+ E7 y" L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! {8 P/ o, A1 O. e
  53.   InitChangeDataBig52GBKS();
    & Y: e0 Z+ q  d# f
  54.   InitChangeDataGBKS2Big5();
    7 t7 e7 W5 [2 m& V/ R8 m
  55.         //, f0 i& Q: q2 u, d  x+ }% ^
  56.         bClickRunExe = FALSE;
    4 r3 Z$ D: P! y4 g
  57.         //
    ( A9 K8 H5 n0 q6 U5 N
  58. }
    : Y$ ~( g/ z9 u* {8 K% c
  59. - f2 _3 ?: n5 }2 v' f
  60. CRevAppApp::~CRevAppApp()7 G! ?1 D6 v# n  U
  61. {
    ) Q  `' @- e& _1 ?3 l
  62.         // TODO: add construction code here,
    , k2 H+ G/ t6 D* Z1 a
  63.         // Place all significant initialization in InitInstance1 }& G* n& O6 |. J- f, i7 J
  64.   EndChangeData();
    9 W' h  E% w9 W, `& c
  65. }+ W* X- A% V2 |+ n
  66. 4 ?- B7 U0 Q& p  K. |
  67. /////////////////////////////////////////////////////////////////////////////5 a+ x7 l( D3 I) T
  68. // The one and only CRevAppApp object
    % d7 e6 }& ~- u4 f& o1 a! \
  69. ( V% h" X$ @$ c& F4 m
  70. CRevAppApp theApp;/ P6 s* ?6 C% Z5 a- u$ o

  71. 5 g! D/ N0 R- y1 t. t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 S7 e) z' z! [3 b6 L8 s! J
  73. {
    ! f3 ]1 ^( J- Y- w
  74.   int iEOF=0;+ }) u% g: C0 y
  75.   char szTempName[MAX_PATH];
    8 G0 ~( T! p1 u  F+ d6 B( Q5 R
  76.   *szFileName=0;0 _) X! }$ S/ Z6 n
  77.   iEOF=fscanf(fp,"%s",szTempName);% K& {9 K: x$ E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * ~3 c! H; W& N- {+ }3 e
  79.   {
    ) G. B6 z' r; o+ V2 l
  80.     strcpy(szFileName,&szTempName[1]);
    " _' a5 J- O  ~! u6 V# z2 j  M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 ?0 B1 u) b7 Y- |- A# d
  82.     {- W! J% E' D. H' Y6 s& k8 ^
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , G, w! ]5 Z: K9 Y' P- n, @5 t
  84.       strcat(szFileName," ");. T- a& f! q& M0 ?0 n' R. v  I
  85.       strcat(szFileName,szTempName);; V- b) ~# d- D0 h- m: y1 h
  86.     }
    3 G$ x. b3 d, I  {0 r
  87.     if(strlen(szFileName)>=1). m& h8 Q; p4 I" @; {- G5 F3 U
  88.     {
    " R6 o' D+ w0 a4 U# \- C3 H
  89.       szFileName[strlen(szFileName)-1]=0;
    1 U/ u1 w8 ~( l2 }  U. a, n+ ~; p# M
  90.     }
      _6 ]% a, z& x/ f
  91.   }
    " ~: f7 o: T5 t* p8 N" u. w6 y8 G
  92.   return szFileName;. ]3 T& l* P. i
  93. }, ?; J( ]% F9 |# _  N2 E. ]2 P7 s

  94. " W* {, y. \, [, Z. P, U( W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / a  g9 t9 V- [! w. V# g
  96. {
    2 Q2 B' U3 h0 |
  97.   FILE *fp;
    9 Z! A/ X( u6 @- j# X& f
  98.   char *key=NULL;6 k# J; U8 g: m( |+ n- I
  99.   char version[MAX_PATH];
    3 p  m0 z+ R5 y/ {, ?
  100.   LPUPDATEFILE file,olds;) a$ J3 g' }; H0 E, P  [6 q8 O
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& r) o$ T  p! p! r& \
  102. # I0 \1 q* w$ J  L
  103.   UpdateList.clear();
    2 }3 E2 y% o  F; e
  104.   UpdateFile.clear();1 p0 \) j: ]8 j/ E( x
  105.   if(GetFileAttributes(filename)==-1) return false;
    / i8 i2 U' q( T$ B2 @$ H
  106.   if(!(fp=fopen(filename,"r"))) return false;* L& n$ }; d0 _+ M
  107.   fscanf(fp,"%s",version);
    & e' G4 N# A0 W" n) A- P# p. o- V7 c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 s- o; `! _8 S6 A1 w& b' {2 w; h2 J
  109.   while(fscanf(fp,"%s",version)!=EOF)( {$ i) I+ \' F8 p3 ]
  110.   {- }$ k" s5 M: U1 W/ T+ K2 G7 p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " |2 E  K, f$ [: Q& j- a
  112.     fscanf(fp,"%s",file->path);3 }2 c) v) B1 h) X3 A+ h: ?% n
  113.     ReadFileNames(fp,file->file);. X! w" ~. N6 n: y0 H, c
  114.     strcpy(file->full,".");
    + U  \) \5 W3 q; A* M
  115.     strcat(file->full,file->path);* l$ I5 A& z5 X; E) M3 I
  116.     strcat(file->full,file->file);
    ) v- ]- k, e! m2 ^/ A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; Z( M1 _3 j2 c$ `) g8 J+ F- e
  118.     {
    , ]1 q" s! g% `# ]% @, W
  119.       file->vers=(float)atof(version);
    $ V  F9 K" m0 e1 x: [; p: D/ E
  120.       UpdateList.push_back(file->full);$ c4 o( b. W, y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    5 o5 Y7 ~0 @$ m7 b! L( S+ d
  122.     }) k* c- M6 g( [/ \9 Q
  123.     else
    5 W) k% I1 d  B
  124.     {8 \1 }5 v; M& y
  125.       olds=(*p).second;2 f: n( f% e3 b- }+ O9 s$ Z
  126.       if(olds->vers<(float)atof(version))# S8 G8 W% }& o0 Q5 k) s
  127.       {
    : @' [/ n) d2 U8 N% G5 z. L. I
  128.         olds->vers=(float)atof(version);% g$ Q. b* k3 S+ H( |% @
  129.       }# C, q! l/ f1 |# L
  130.       free(file);
    ' ~1 z9 r: N& \7 d$ Y; D* T
  131.     }
    6 A( U6 O# P1 q9 p. o
  132.   }1 i+ I* c# i* j5 B
  133.   fclose(fp);) O# A; b; _2 D5 k) E
  134.   return true;
    " {0 J' X# ~) M- W- |* c
  135. }
    ) W% Y2 W5 E# l: Y
  136. * g7 b& b4 U3 Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( H7 `& s: `( D1 Z: H: R+ n
  138. {$ c6 q$ _* o3 P% A9 M% [% Y
  139.   TCHAR  szFull[MAX_PATH];
    . a+ \0 H# Z9 W4 P# j. s0 K5 }4 o# g
  140.   TCHAR *token,*inter;6 |3 J5 v, p4 f  Y  U7 H$ k7 x
  141.   *szPath=0;+ C5 h- k3 ]$ K+ m! b0 j
  142.   strcpy(szFull,szFullPath);
    6 y1 s7 v, u+ g, G
  143.   token=strtok(szFull,"\\/");
    0 Y% `) G6 E1 ?9 q4 w% A6 j
  144.   inter=token;6 w: v/ S0 j" D2 k% k- a
  145.   while(token=strtok(NULL,"\\/"))
    ; }$ y8 ]3 \! z
  146.   {# B! C' s# n0 B0 L. z& D8 v
  147.     strcat(szPath,inter);( P" ]% k. T7 R7 y  T- Y
  148.     strcat(szPath,"\");
    0 g) J% U" ^% O) u8 I
  149.     inter=token;
    - n& q* Y+ e7 r
  150.   }! T0 x! K2 G. `" ?& x
  151.   return strlen(szPath);; a9 a9 a5 L& K- g: C$ K$ \
  152. }0 _+ ]3 K: ^! S; d
  153. 2 N7 F2 v7 n3 ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : r4 k. K) C0 d6 h, K2 p
  155. {
    : I! ]7 o4 s. C, y) D8 ~/ k
  156.   DWORD attrib=GetFileAttributes(Target);
    + W8 r4 q7 _$ c  f/ m
  157.   if(attrib!=-1)
    / n/ K' R& R! t
  158.   {
    8 Y" F% p7 I, x5 w! n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  }/ _9 I4 @7 v$ x( ?& }  c5 ]
  160.     {
    ! Q1 m) P$ K7 n, q  O+ s4 m
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 G  Q. a/ Y5 D6 [4 z5 n" W$ v
  162.       SetFileAttributes(Target,attrib);
    : G) l* @. }( l4 u/ j5 A. c
  163.     }
    " [1 u) J! V( ~1 C4 W% w5 B
  164.   }
    $ O/ y8 W. l, C  l! q6 Y9 z
  165.   CopyFile(Source,Target,Erase);
    0 g2 z% @& q. }4 p
  166. }
    " Y" B; L1 {& r6 x
  167. $ A- {( d' X$ B8 Q: q- |; Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)) U1 H1 M0 T2 U
  169. {' }. n: d. x) s( \
  170.      FILE *fp;
    ; O) \5 Y, t" k" O- M; L4 U3 k
  171.      char  szBuffer[8192];" j  X6 T1 O0 G2 z; X
  172.   va_list  argptr;* k0 e$ y  e/ h. }# ~1 o! N) Q

  173. 6 D8 n3 a8 ]0 l0 x. e/ m2 j: _
  174.         va_start(argptr,message);
    : |$ T, i4 o1 s9 U
  175.         vsprintf(szBuffer,message,argptr);! x+ ^( a* l/ v  R8 y( f2 P4 E
  176.         va_end(argptr);
    " N  C5 E' f2 ?7 t4 n2 ~
  177.   fp=fopen(FileName,"a");
    # W" Y4 |3 m; }1 I2 y7 P" k
  178.   if(fp)
    , `, d3 }0 A/ P% L  G  }
  179.   {5 j- ?, T/ l2 ~1 d
  180.     fprintf(fp,szBuffer);
    $ R2 i: c- R1 K- J+ M8 C
  181.     fclose(fp);# t- r9 O1 J" r2 V7 P$ [
  182.           _flushall();
    - v: f# Q; B9 q, n
  183.   }
      v) }4 y9 {2 ]
  184. }
    $ c; t" @! R- r5 y

  185. ) L0 f, V" k, x- |' V& K8 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)! `5 }$ L1 m9 W3 s/ k% N
  187. {0 w2 ^* E$ Y, m% r  J
  188.      FILE *fp;( s) h$ g; B2 A9 w
  189.     DWORD  attrib;
    0 l6 H  H0 o/ A9 w
  190.   attrib=GetFileAttributes(FileName);$ K3 d# c2 p' T: q' K. ~9 X+ m! P
  191.   if(attrib!=-1)
    + k& Y3 q9 a3 L- H. \& x# m3 v
  192.   {, ?$ ]5 I- y! `+ ^
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 c5 {' r* |: S& g( b
  194.     if(!SetFileAttributes(FileName,attrib))
    $ S# R* U9 A4 P7 p) J
  195.     {
    % g# i0 V- i! K
  196.       return FALSE;2 L0 {. W8 t* K8 l7 O
  197.     }* u: ?  R3 W+ h3 T! r) m
  198.   }
    1 g" ?: R- ?; `* K+ \
  199.   fp=fopen(FileName,"wb");
    , o9 ^3 C( G- [9 o' B
  200.   if(fp)
    - e; [" G8 W6 |" s0 @' G) ~6 d) M& R
  201.   {% w- V) D- ?1 O8 k2 V
  202.     fclose(fp);
    * {6 c/ ~# w& U- i: t
  203.   }( o. E5 S. F5 S+ U5 Q- Q
  204.   return TRUE;
    8 F8 _9 a3 W4 m1 D, G' h
  205. }
    4 ^) X/ s0 M/ ~7 V. |) M
  206. 1 z( Y( p, H- ]# s' ~' g
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    & k4 h# N( X! H3 u2 m0 q- v
  208. {
    9 j9 y6 k7 V6 V! N7 w( c0 S$ J
  209.   char filename[MAX_PATH];6 ?4 g& Q2 D% e6 }9 C9 N
  210.   LPUPDATEFILE file,olds;
    ; N! n" `/ a# j
  211.   std::map<int,CString>::iterator i;% T. i8 h8 ^6 u: {/ t" l) _# o% b
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 s2 W# C8 ~& O
  213.   std::list<CString>::iterator l;- R2 e* H% w* \# v) f( H2 f
  214. 1 W' P0 T; y( c1 H$ j/ H2 S, t
  215.   if(bFirstUpdate)
    ' W" n" [1 P5 \: B( U6 W5 z
  216.   {
    8 |3 Z" J: d- n* _6 p6 _  `
  217.     dwCurrFile=0;
    ( T! s( M# \4 C' Q7 W& _8 o
  218.     bFirstUpdate=FALSE;: F/ U- p8 T8 _& Q+ x
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' c  X1 A1 d; f5 Y4 y  M
  220.     {
    , U0 ?  g3 ^( V% O. L
  221.       dwTotalFiles=UpdateLocal.size();! ^, G! X9 o7 O; E8 o
  222.       dwDownLoaded=0;
    8 W* s0 p  u& C
  223.       bSilentStep=FALSE;1 e% y" v7 h8 Y1 T" w; l" P
  224.       bCompressed=TRUE;
    7 n1 a* ~( x" M# x4 @! S  \7 S
  225.       strExtLocal.Empty();
    $ {8 a% a1 P; B9 }
  226.       strFullName=(*i).second;
    # z; _/ U- Y$ J1 H
  227.       dwProgramState=AP_CONNECT;5 E3 k7 }( O' V. ^7 [  l
  228.       return TRUE;
    3 e( t7 w  B8 k' J1 C
  229.     }
    5 o2 ~( z. E0 e0 i8 d
  230.   }4 @$ B4 o* h/ o. T
  231.   else if(bRestartUpdater==FALSE)
    ) N* P5 S' Z' Y
  232.   {+ o6 }2 E: ?& l
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; Z5 K- r4 a- R' D
  234.     {
    8 X; J5 R, A2 O9 }7 `- m! w/ `# w
  235.       file=(*p).second;
    3 A) W6 ^4 r7 C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 G7 I8 @/ _5 t) ?
  237.       {) k! \' q  h/ Q1 h5 q  o
  238.         olds=(*p).second;
    $ e- E2 @% d: Z( z& [
  239.         olds->vers=file->vers;
    , m  g6 X5 g! J/ `; ?
  240.       }
    4 v- r- \  a7 T
  241.       else1 J4 @6 C' m1 T. Q$ G6 K9 m- w* |
  242.       {
    - j& n- \3 J. O5 E* x7 @8 [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      r  O6 I! o9 j* d( i4 M1 x2 s; e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 M; C; x3 l# t, h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));9 d/ x$ O7 [+ T( \+ Z% d
  246.       }* H- F4 O8 s/ g# C: V4 ~  k6 E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 @, W+ P5 s' B2 M8 T
  248.       sprintf(filename,"(%s)",file->file);; u0 j! F6 n  G; g. K8 Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) q' e" w- i! |- Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( m1 y) i9 `, s  S& @8 ^7 \) N" a4 e* X
  251.     }# M9 T1 w6 l$ V% D
  252.     dwCurrFile++;
    . p0 i+ O/ Z7 ~( s3 w& V9 Y& i. I! l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 S% a. X% j/ D; A% F+ Q2 A' N3 ~
  254.     {
    ; M5 ^# [( n" m8 M
  255.       bSilentStep=FALSE;: f  h. o5 t7 a7 f+ `$ C
  256.       bCompressed=TRUE;5 F& h' B$ r% R& H4 Y6 c
  257.       strExtLocal.Empty();# v. \2 l# [8 y' \; H; @7 P
  258.       strFullName=(*i).second;: I: h( A; r+ n, r
  259.       dwProgramState=AP_CONNECT;- k, q! e8 Q! ~' V* P
  260.       return TRUE;
    ; s$ P1 f: y$ M$ r1 |4 o3 Y
  261.     }) y4 D" {* c6 M
  262.     if(!bRestartUpdater)- k& ]3 E, S1 T6 h' Y1 Z
  263.     {$ F/ d( p; e. `- w
  264.       int iCurrSize,iFileSize;# n" e; r4 ~: d) u/ w* Q
  265.       iCurrSize=0;
    # y" @% }9 n1 w
  266.       iFileSize=UpdateList2.size();! |% F0 X9 w. |  i) C' _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");- b" ^. l& C, X6 b3 w+ Q' m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 ^/ r+ N- {  w7 ]. f
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 I3 J  G& {% k) Y# i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! |. @8 ?0 z: w& m6 m* h
  271.       Fclearf(".\\update.dat");
    6 y9 D6 o2 ~0 y5 z4 e& P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 |$ ]3 M$ M. u/ J- Q7 J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( V# H3 n1 e% z) k6 [
  274.       {
    / G2 m, Z: L6 Q, _, s; ]1 h4 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' ^" b3 H. A& Y5 o% q
  276.         {
    ) G) p# e! f+ x3 t$ E0 X
  277.           file=(*p).second;+ ^" |1 D9 d- s* V) `7 n& b7 Y
  278.           sprintf(filename,"(%s)",file->file);$ J2 B( Q) D/ I9 T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% W1 n" V3 w/ L* o7 _( C
  280.           iCurrSize++;+ N! K7 J) k4 P. c2 ]' |) a, R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- [3 P( b$ x$ m. @
  282.         }' E; O5 z( z' N
  283.       }
    8 O* {2 R: l- i2 f
  284.       unlink(".\\update.txt");
    ! e9 S8 |1 `2 v; A
  285.       unlink(".\\update.tmp");; ]$ y" o9 W1 x( o! Z
  286.       Fclearf(".\\checkversion.dat");9 ^7 _" t% @! F& @! F& ~; V+ g- o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 m4 S0 k3 b3 q: K/ m0 p9 H
  288.       if(UpdateLocal.size())% I9 w0 V# @" B8 q' V1 V
  289.       {
    ' |- {! o, i' G- Q
  290.         UpdateLocal.clear();0 O* q; |% `2 I# h6 b- f
  291.       }$ g; W- y; ]+ Q: P5 K$ W. k
  292.       if(UpdateFile3.size())/ ?3 k# ?% d0 h; Y9 [4 [( `
  293.       {
    " o( R1 j% u: V/ R* ~9 M2 w# L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): \) Q4 D$ K3 }( G0 N7 ~* N2 `
  295.         {
    ) `( U0 f$ G& i* ^3 C  O
  296.           file=(*p).second;
    ! s) P& f: H! {& m7 w& m& j0 t; d
  297.           free(file);4 O8 s$ z5 G& e' y
  298.         }$ [: q* z! [% {  n3 C1 X1 C
  299.         UpdateFile3.clear();( q7 d+ g( r( r2 B
  300.         UpdateList3.clear();
    - `/ P: _4 c8 O' l6 ]
  301.       }7 I7 ]+ z+ {/ K0 j: N
  302.       if(UpdateFile2.size())
    ) e- S$ I7 P  E  O7 }  K; Q
  303.       {! f  k6 K" `' E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + ]" ~- l& ~! z
  305.         {
    4 m; J' I$ n) T! V6 S
  306.           file=(*p).second;
    % T2 n4 Q1 O2 @& _' l8 q9 |0 p
  307.           free(file);6 V" E( M) p! H. e0 T3 |
  308.         }
    / g. V) u1 Z- {% i! ~6 f
  309.         UpdateFile2.clear();: W, ?5 P/ b5 z3 L
  310.         UpdateList2.clear();
    * `6 o, B, R& n* L6 h
  311.       }
    ' _6 u6 b6 v* X9 p
  312.       if(UpdateFile1.size())+ n; h9 m5 g1 H! A) x$ [& s& y" P
  313.       {2 o! t/ Q' A* r# i8 x0 }. n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), C8 C! e- [6 q+ X% q
  315.         {
    6 M3 n1 K5 B8 f$ O7 g$ y8 @
  316.           file=(*p).second;
    " e9 h5 S" E' t. ^0 b% V, f, _
  317.           free(file);* g  Z$ p' p* i- ]* I
  318.         }
    % \, d; I- m0 x. x
  319.         UpdateFile1.clear();- z4 A, C# D& w
  320.         UpdateList1.clear();5 N3 _5 }3 e$ I8 q% U' d+ o4 y# T
  321.       }* p# b) v& [# p( v7 J* F. U$ f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 ^7 `; s" _- P
  323.     }
    ' |* w, C3 F; z( }
  324.   }' M0 _1 N$ P3 R8 B
  325.   return FALSE;$ u) }( X- q  y1 m
  326. }' C, l6 I4 H1 U( Q# |6 k  E
  327. & s4 X- d5 k! a& K- E
  328. void CRevAppApp::ClearAll(void)+ R3 G9 Y3 @& Y) N$ s% A  s8 w
  329. {
    6 {+ g+ i' p0 ]' O+ y# R: r
  330.   LPUPDATEFILE file;
    # a( P3 p2 ?+ T+ q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; H% H: V- e" p9 a# Z" o
  332. $ d. P3 C* K0 K$ ~+ c
  333.   if(UpdateLocal.size())9 A: p. ^2 A7 Y5 i
  334.   {. F4 `  b$ N% n+ x7 x
  335.     UpdateLocal.clear();" H, u# U! N1 K9 ?  e
  336.   }
    " n/ k/ |* `/ e
  337.   if(UpdateFile3.size())1 m8 M, P1 ]6 K- z+ J, Q( m* ?# |
  338.   {
    - }" ]5 @% M6 _8 `1 O7 _0 k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) {- _9 Y% @0 Y9 I, E
  340.     {
    - s3 @6 P, y7 a$ W( L3 K) t
  341.       file=(*p).second;
    " }" Q4 O3 I1 D; `
  342.       free(file);
    - b. C- {2 q8 q* y7 Y
  343.     }
    . \6 [, e3 {2 ?$ X" Y3 z# \5 n9 S# u
  344.     UpdateFile3.clear();( a: o9 y+ M  ~7 h1 ^4 e) y
  345.     UpdateList3.clear();
    ' J0 L0 T( A9 [& L& O9 D/ E- d
  346.   }1 Y0 G0 T" y; T; G5 o
  347.   if(UpdateFile2.size())
    8 r. _" _, e8 o  [# i
  348.   {9 D3 t  F+ ?4 {, v6 u3 t3 ^! ^
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 w5 O! B$ a: U( c3 W
  350.     {2 y# z6 {# [6 m+ o
  351.       file=(*p).second;$ q" d9 T7 x4 ?! G' P0 _
  352.       free(file);) S7 Y  w; w, L' d  I3 X6 D
  353.     }
    ' S$ Y+ e: n' |2 e1 n" \
  354.     UpdateFile2.clear();
    2 |- X2 _, @9 e0 Q
  355.     UpdateList2.clear();
    5 D0 e: X2 a/ s9 j
  356.   }
    , c1 p6 h! N9 n6 p/ @8 @: U
  357.   if(UpdateFile1.size())
    " u- ^. [1 f7 ]6 G
  358.   {
    $ P  S1 z& Y1 K  \: Z2 o0 a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , i& A- }) y1 q3 D3 G/ Y. S5 y: h
  360.     {2 p# j: L6 f- G3 @8 |/ X
  361.       file=(*p).second;
    6 a: M/ x  [+ ]$ U4 C2 T& z/ N7 B+ C
  362.       free(file);
    ; e, M' q7 C" f+ k
  363.     }4 C1 K9 `; ^  O. ~. Y1 y
  364.     UpdateFile1.clear();4 u" h  N: f- S7 p7 ]
  365.     UpdateList1.clear();# X9 {7 \5 M+ p' I! G
  366.   }& L. ~. S" V4 Z# R2 w5 z2 {
  367. }  
    / [5 X9 k" }$ ^" n- |
  368.   
    2 B' C8 c" x3 h' A( E3 w4 [
  369. BOOL CRevAppApp::CheckLocalVersion(void)  ^  r8 u) X# O+ d1 ]" E0 }3 q/ I
  370. {
    0 z" a0 H# s6 F: b4 V
  371.   int c;
    1 e$ p$ s  r) o" Q6 s
  372.   LPUPDATEFILE file1,file2;
    $ ?' c  ^# w$ S7 q3 ^2 }  d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 E! v( F+ P3 f' R; V# ?  Q
  374.   std::list<CString>::iterator l;- {$ @* }' L, S0 Q9 j9 X
  375. 8 q$ y& z7 r! n: D! B8 q, H: v
  376.   UpdateLocal.clear();
    # Q) c) r2 _5 m" i# Y1 z" N
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ s$ ?4 `: y5 O' U& \' Z" ?, J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# r0 X, k7 N2 w9 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 J! J& ]( g% A, g; N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    : x; V! h9 l  }: j; }' w
  381.   if(UpdateFile3.size()). K& _& U' d6 Z. R: ~% m6 f
  382.   {4 r$ s; l+ f% o5 C9 I5 S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)& ?! O( q$ w0 j! |% w* A' g- q/ _) \
  384.     {7 h" |) |8 z. K9 g5 K/ o  d% s+ C' w
  385.       file2=(LPUPDATEFILE)(*i).second;8 l, `' B8 K% T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# I  p! Q4 m6 i' V# P" g
  387.       {
    + b, `& d, W# Q; Y4 u/ E
  388.         file1=(LPUPDATEFILE)(*p).second;) e+ W+ a5 g5 N# e3 k  {9 @
  389.         file1->vers=file2->vers;! }/ o# x: r% R, V
  390.       }! T( v# r5 X  q/ Q
  391.       else+ `: O% e# r* w7 _0 z7 c
  392.       {
    3 ^; h. p. g" u" z: i: ^
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! f% d- X$ |8 I- P
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    % T* t) O' b& P0 ]% g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% r0 a% [3 O! k/ o
  396.       }
    # r/ e+ y6 T) Y* e- S
  397.     }
    ' f+ r( I1 t7 h0 e5 T
  398.   }
    5 }( [8 R* X, o
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 h) Y: u- v; H& X/ J0 h$ g4 k" k
  400.   {; S2 `6 ~' [" K7 e9 n# X7 {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())9 I" ^$ g' o% Q5 M6 L0 P& \3 T
  402.     {
    $ }, O& I7 g& S& d
  403.       file2=(LPUPDATEFILE)(*i).second;
    - r& ^+ h% ]' o% H8 i* C' D! _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* @+ ^8 m; Y) D8 e* b* \' U
  405.       {" ?" |3 O8 y- |$ @# Q) \
  406.         file1=(LPUPDATEFILE)(*p).second;
    " P/ W9 c* P6 ~- k/ W
  407.         if(file1->vers!=file2->vers)
    / _$ L+ Q2 i& A' K2 D' k7 B
  408.         {& ^. t! Q3 @) x+ G' i+ _" D% J
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 J3 y3 ?  B5 d3 m, T
  410.           c++;
    9 D1 r5 v6 u+ O( J1 k
  411.         }
    ! r! j; x, i% c
  412.       }
    9 @" g: _5 u: h/ H
  413.       else7 I6 I: F6 F! G3 \
  414.       {9 w3 j0 l0 F5 I; A& P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 r* e; R/ j- J6 y( B0 J% ^; J  T
  416.         c++;4 l/ z0 P. }. w- g, r
  417.       }% l. I" T  {2 |$ Q; N0 w
  418.     }
    / k1 m$ ?0 y' Z4 [
  419.   }
    : g; i$ r. o) c4 x3 Z+ b2 L7 ?
  420.   unlink(".\\DownLoad\\update.txt");2 G$ ^+ c$ y5 s( Z# E5 [
  421.   if(UpdateLocal.size()) return TRUE;
    5 W% S' Q( [7 ^* e
  422.   else                   return FALSE;8 I/ Z5 x( D9 F: p- Y
  423. }# n; u8 S8 @" d# @. j- A! B
  424. 5 s7 g" D6 N! e5 j3 w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 q& e' \7 k1 k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 b! F3 T- D3 b+ j  L5 T2 R

  427. 2 r; _1 P2 j" u6 O

  428. * s, ?# Z1 J0 q4 j1 e# f
  429. # G& C7 N9 B. m' L. d' c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 R. D) r5 Y- G! ?+ D5 F
  431. {2 @1 E$ ^  r: D- |1 m7 n$ b
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% I& W3 c4 R( O, {; J" R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ `2 l1 _: y  ^4 C
  434.   {8 T6 L' {6 J! o3 I
  435.     char szLanguage[50];: L; t, h7 A( q% _6 h" k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! u4 L4 x" T* ?* @! b" t+ }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * Q5 I8 v! r/ f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      ~7 O$ J- d6 z- d' Y" R% w1 s
  439.     else                                   m_iLanguage=ENGLISH;9 g% L) e( O5 h$ j9 O* |: P
  440.     char szRegister[100];" I: |3 ~- o* D+ }5 O7 v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . C) H' G1 _' R& ~# B0 j
  442.     strRegsName=szRegister;+ o7 ~4 P0 f! M3 ]2 `- U! i
  443.     char szPatchURL[100];
    1 O2 E9 s7 H3 [! Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' a6 t( Z4 V/ \9 B  b" k$ t
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % G3 Q: T- X# Y6 W
  446.   }
    , Y4 M( q( Y* K* N
  447.   else
    ! V3 e4 G+ B6 z; G5 N' Q
  448.   {5 W4 j1 F! v: w1 @4 m
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + s! @: f+ Z4 v# p) m( ?
  450.     strRegsName=DEFAULT_REG_URL;0 q! E- ?- V* o8 s' f, R# d: m
  451.   }
    6 H  B9 b: M* c. A. J* x$ }8 R" o
  452.   if(GetFileAttributes("hosts.ini")!=-1)' t$ W$ m0 P+ N0 Z6 B
  453.   {. r& Q9 |' V& R* c& k$ Z. n
  454.     char szIP[50];, b3 U- E7 K$ b9 d- {. x' G; ^
  455.     char szDIR[300];$ ~/ o4 M/ K- R3 F: l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % P' A  ?& b2 n* ]
  457.     {
    - \) U7 \8 r2 b, E; O" L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, f' h) a8 O7 `# k2 x5 R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - M, y. m4 H8 b! T9 N- p
  460.       strHostName=szIP;
    $ H- u, R! K) W, E& p) X/ G$ H
  461.       strHostPath.Format("/%s",szDIR);% h2 n( C3 X- ~& y
  462.     }) p7 t4 @& y3 j8 ^6 }* R+ |9 s
  463.     else5 I- _5 z, ]) S
  464.     {
    2 }3 a7 N8 F; L4 E. r
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), e- O1 J; n7 W( }. }8 V; [% T  ]
  466.       {! A) G, D+ V7 Q0 K: Y
  467.         char szLanguage[50];
    , L4 r0 I& {& s9 G( Y7 w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) q- S8 ^: g* Z/ t" R6 ^+ C' K
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 v6 n6 x0 ?& ~' V' b! R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 B4 U3 [) @% l/ N  M$ q  u
  471.         else                                   m_iLanguage=ENGLISH;  Y3 l" _* P# _# ^+ u; K: E4 i4 h
  472.         char szRegister[100];
    / q! y) D6 Q5 H; w0 i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: s) y9 }7 K" {
  474.         strRegsName=szRegister;
    8 {5 ?$ {% S9 ~* o8 r" U% x. ~
  475.         char szPatchURL[100];0 [& X: `( L: Y" K4 ^* X" Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! a3 [- h9 ]! H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ E6 X, d+ \, Q/ O. q' r
  478.       }! Y8 V. n) H$ m% l* S, {
  479.       else6 s. H5 P4 w! Z' s3 p
  480.       {
    " ?6 m9 A3 O6 q; f3 ~: _4 f. S2 j; e) T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ [8 V9 d+ H8 H2 L/ e0 e5 L% s
  482.         strRegsName=DEFAULT_REG_URL;
    + a/ A0 N+ x  C0 l) N3 H/ F; ]# c* W
  483.       }
    ! e. j' j6 W& C
  484.     }: g0 j. Z8 z3 T; Q; M
  485.   }
    2 p& t( E2 ]: m& |
  486.   return true;
    % ^. Q) D+ R0 R5 v4 M
  487. }
    $ g1 [, H% U- _- e4 G0 p2 E
  488. : f9 J  B# h: Y6 S
  489. #include ".\ZLib\unzip.h"
    $ l6 ]3 X9 S) b: v3 Z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);' W1 F& q1 A! w% I1 a5 D4 N8 t) I
  491. /////////////////////////////////////////////////////////////////////////////! ]$ n- _( X5 v6 Y- L4 B
  492. // CRevAppApp initialization
    2 d$ `, M9 }7 z9 T4 |8 c

  493. 9 Q, S* u4 |" V& w- p) x2 j. L
  494. BOOL CRevAppApp::InitInstance()
    # h( `+ F% M% X' J  A: C2 ^+ }
  495. {
    0 r, L( x( c' s$ y- v0 E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( ^' S, h, G: H/ m; d+ r: X* d0 ]
  497. 3 _) ~7 B9 {, w* m$ [3 G2 B( v9 k' \" f& ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( v; E7 z1 L, E, k: M- p* h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& _. H7 C, |7 y( n& _
  500.   {' R  }( [  \1 A8 _6 P. U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . h" ^& D& @% M8 A4 q; p4 e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      ]  F6 U- @- m% ^5 W$ i& U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 D) m. U+ ?/ Y1 x
  504.     {
    $ k; U* [* V" r: ?( P/ r) N  v
  505.       strcpy(szPath,szPathTarget);
    ! a9 J2 ], b- Z5 ]
  506.       SetCurrentDirectory(szPath);5 U+ f% L" W  @0 b5 ?4 f  D
  507.     }
    4 I  ]- C; o) `6 Z6 B0 c
  508.   }! w# ~- M/ O" Y- H) q% U; b  U+ A
  509. #ifdef _DEBUG
    2 z8 Q- ~. k7 W% B6 {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! Q. A. t, [# x: t0 G  y
  511. #else* r9 O( h+ J& k, G' c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 ^: m! h- z, O
  513. #endif5 Z; c: E" g- h' J' m" S! T
  514.   {
    & p7 k% V- U: ]8 Q7 A+ Y) s  ]. C
  515.     char tempFileName[MAX_PATH];
    2 H1 R& e1 F& P; n! d& i& C
  516.     strcpy(tempFileName,szPathSource);- T5 o1 u6 [) H* Q+ i2 J/ d* n- ]
  517.     tempFileName[strlen(szPathSource)-12]=0;3 h3 E0 m2 ~4 h$ l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . Q$ Y8 r: d, q! r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# ?* X% z0 }" F: t2 U
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / d! K, s, Q4 K. }1 |. v
  521.     return TRUE;
    ; Y7 A" P# [9 \" v
  522.   }
    ( X, @4 [3 O. Q9 c; d$ f/ ^1 z
  523.   // Nuke 0118: Delete run.exe
    # t3 t  S" {/ Q/ x& Y- r1 h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & A' }$ J; {; m4 s" r4 c
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    2 `' Z( Z8 |, w: Z& F3 B! k( i
  526.   if(!ReadCfgFile("Config.ini")): O) K8 b" O; x- \3 ?. b% Z( X
  527.   {" t* m4 ?7 `0 D- y! B3 r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' o6 c3 R8 F0 C/ V
  529.     return TRUE;
    ( A& @( h5 N* i, V0 V( F% U
  530.   }
      h8 ~$ Q* c7 G5 o& x! l
  531.   HANDLE mutex;
    ' ~% N# u1 B# e8 V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / h6 H) H9 r! W" r' ^3 D
  533.   {, h0 @+ s0 G+ q8 {6 t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! F# l: c" t  g: U
  535.     {
    ) I) }( n" e$ Y  ?5 p/ h  [. C$ j6 Q
  536.       CloseHandle(mutex);
    9 q( w' v8 g6 S( H" U% {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);( g0 q' B% D6 t" c3 @! |
  538.       return TRUE;
    & H7 S! j3 P% w, I2 G
  539.     }4 v# v; ^# n+ M# P$ [
  540.   }  ( x: }; s/ G4 s8 H8 o% G
  541.   CloseHandle(mutex);7 D5 D6 ~. g9 Z# Z

  542. . K/ L; N: E0 h0 y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  D) |# p! U4 P0 H

  544. ; z- N3 f/ D/ o) g' G
  545.         AfxEnableControlContainer();* w* j9 ~( l8 l" i4 ]
  546. * z# l- Y8 r1 `# l* f8 E9 x2 c; O
  547.   bCanUpdate=FALSE;
    & b# N+ r$ ~- P" S1 u7 R% T$ N
  548.   dwStartUpSteps=1;
    , f9 ~* K. @# P- o' ]1 I
  549.   dwProgramState=AP_NOTHING;
    & e/ y. C. l/ m  m7 y, n7 ^# W

  550. 6 j" N, M! e$ p. L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  F6 ?4 [% m) D3 ?6 E. |

  552. 1 ]& k! L5 D' p6 c9 C6 M0 L% g9 \
  553.         // Standard initialization
    ; Q/ h$ T! w7 }, U
  554.         // If you are not using these features and wish to reduce the size
    5 p/ f# t9 x& J! T+ o9 Z
  555.         //  of your final executable, you should remove from the following
    6 [' ?$ b5 W/ u& {; ]+ U' ?+ B  H
  556.         //  the specific initialization routines you do not need.
    ; _4 }2 Q9 n& d5 q
  557. 5 _+ W) D; x$ S
  558. #ifdef _AFXDLL; V! l) S8 m6 Q9 y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    : S7 n) H, h/ D
  560. #else# c& H2 {8 Z5 {8 ?% T1 f
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically  u- @: ]( }. V& L
  562. #endif
      P  q5 {% P" F

  563. ( p" F5 Q6 i8 |9 N
  564.   dlg=new CRevAppDlg;8 t7 W) o/ o1 h! I/ ^5 u
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 }3 q7 L6 r. F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ S3 j8 C7 b) M0 R4 F
  567.   m_pMainWnd=dlg;
    ) m0 c# x' G0 O

  568. 9 g/ n5 z- f) Y& X: N; W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , e1 |# z3 V5 b8 H5 U& |

  570.   b4 T2 T6 s1 `" w
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 Q2 H& f: T7 g" e- w. Z
  572. //  ULONG_PTR gdiplusToken;* I7 z; c+ C9 q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 {3 X- [% o: Q2 ~

  574. ) A1 |; v, H7 D
  575. //        CRevAppDlg dlg;/ s* K& F& k* [- H; {/ n
  576. //        int nResponse = dlg.DoModal();) }0 M: }4 {1 P1 J. i! X# m
  577. //        if (nResponse == IDOK)& `$ k$ m" ^, q$ X' x$ U' S- x
  578. //        {
    # g) B% O3 _4 H3 Q, R
  579. //                // TODO: Place code here to handle when the dialog is( i$ \# d7 H. M& d
  580. //                //  dismissed with OK
    - h5 s2 P3 F% b# V, [2 C! c1 Q
  581. //        }
    / K7 O) T* L+ u' C# S: _
  582. //        else if (nResponse == IDCANCEL)
    ! F- g% i7 J0 C* [* c" }. O
  583. //        {
    * w' y& p8 ~3 {8 `( N0 Z
  584. //                // TODO: Place code here to handle when the dialog is( C, |+ F/ |% ]+ I
  585. //                //  dismissed with Cancel
    3 T; B% ]' Z' y1 }
  586. //        }' x* _: s- `: K5 h: M3 q3 ]

  587. 7 v$ A! f2 }1 ~. S
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . m  e* o) |" f+ ?$ F1 F% L. s
  589.         //  application, rather than start the application's message pump.
    / U% k* A& j* U* F  c3 i
  590.         return TRUE;7 I" H" {6 w. W% s4 q$ P
  591. }
    4 C! l/ a# J1 |8 q9 g4 r6 @
  592. 7 i7 v0 Y8 [& f; t8 n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" I7 K4 M3 A  b' z0 W7 K7 L
  594. {0 p" `1 a4 O- g9 }
  595.   int i;
    ! U) |, T8 G3 v+ s1 p
  596.   char *szRet;  S. m6 E$ ]' d' O6 ]

  597. & R1 l% p' z4 g! g4 s" }/ v3 N
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 t: u5 T. _2 {) d# b
  599.   if(sztoken)4 b) s, S  b! Z( L( Z5 L
  600.   {* M# V3 r) ?- A/ Q
  601.     szRet=&sztoken[itoken];# j, k8 n/ z/ U  u/ N" o# |2 @
  602.     while(sztoken[itoken])
    6 s5 b0 z; x- x2 @  Y. _# V3 R
  603.     {2 O3 i" d% V' N5 W* P$ H- h& z; B! v6 m
  604.       for(i=0;i<(int)strlen(token);i++)
    + [4 G$ }2 E, `7 x6 z" o
  605.       {- o( h6 J' ^8 Q4 O! F" m, f0 L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( O) l; u4 A; k* t! J, ~
  607.         {; @: {$ I8 J9 T
  608.           sztoken[itoken++]=0;0 ^$ o3 ]6 V% ~6 K3 A
  609.           sztoken[itoken++]=0;/ v: P9 H5 N) `
  610.           return szRet;  v+ x9 y2 U/ B" _# b  O9 h
  611.         }
    ' c8 r- c( {3 {5 D& S# S4 G/ c
  612.       }# @" K1 W9 J) ^( F
  613.       itoken++;
    / V7 _/ \  w7 K
  614.     }
    2 W2 L1 E" V) G; e; g( l
  615.   }' B7 t" Z$ g5 T3 |9 @* ~
  616.   return NULL;, R3 ^" E1 O3 ^) A+ Y4 e7 V
  617. }' C2 D/ f- r2 [3 ]$ F) ?7 U
  618. / k: r, P5 G% S" }& _
  619. void ProcessProc(long Total,long Current)4 @; u6 l5 O; J' d& Y6 F, I
  620. {: R( c2 X: @" l. a
  621.         MSG msg;
    1 U# V" Y1 N0 @/ s
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 C8 C: m" N8 k
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ v4 U/ N: P, z/ M6 F' h( J( @
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' ^% p. w) u( z; j
  625.         {8 }) g0 R: f  h) T
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & Z: t, v3 V* p- w& u4 H% c8 _
  627.                 {2 _. r2 P7 {5 a- @' Y
  628.                         return;
    # ?1 _# T7 E8 A# j
  629.                 }
    8 H" ^3 @* C8 U7 k" J; K% C/ i
  630.                 TranslateMessage(&msg);- @; Y& I3 ?& j% `6 C% j
  631.                 DispatchMessage(&msg);
    ( a* g% P, |& ^5 J& j
  632.         }       
    ; L, F% D! P6 b  C, @: h/ S4 O
  633. }
    - H/ u/ J+ Z# Z" o) ]

  634. 1 n3 g" m) i& E$ Z- [
  635. BOOL bFirstChar=TRUE;, [0 w5 Y: x5 g) E$ r1 K
  636. ! J) F* e3 Q3 ~) D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , m/ F3 T8 \& |' y4 f$ Y* Y
  638. {
    ' V) [  R# M' |" H
  639.         // TODO: Add your specialized code here and/or call the base class4 V/ L( I4 T) w
  640.   switch(dwProgramState)
    1 c6 z) Y4 u6 t7 q( r
  641.   {
    ! K5 S4 X4 q) Y) D: s+ o
  642.   case AP_NOTHING:
    $ |5 {3 P3 }. u" ]3 ], O4 ?$ K
  643.     switch(dwStartUpSteps)* p6 w! b6 L1 x! J" I2 `
  644.     {+ n  q1 C2 B$ l) A" n, Z2 l: J; b
  645.     case 1:$ [) \3 ~6 N! c8 T
  646.       {
    8 t4 G8 h# _# {5 p
  647.         int i;- }- ?  k* t" g5 x# `) a
  648.         CDC *pCDC=dlg->GetDC();
    % w* L. {' F1 T1 e$ K1 X
  649.         HDC hdcwnd=pCDC->m_hDC;0 F/ c. {" x6 w1 K# |) U; _+ I
  650. //        Graphics graphics(hdcwnd);
    2 U3 h+ w2 P$ F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 a) k$ b5 w* J, }. z0 a: {
  652. //        INT iWidth=bitmap.GetWidth();/ n- [7 s  _1 A5 W+ B( ]4 W7 [  B
  653. //        INT iHeight=bitmap.GetHeight();# y/ i3 t8 S7 G6 _
  654. //        Color color,colorTemp;
    ) Z7 m3 G. f$ G+ y+ d- n6 d0 R
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 |* x1 Y! |& r6 _" ^
  656. //        {
    ( x- `0 {2 C7 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 m% s' r8 \# g
  658. //          {
    & d7 @) B7 M) A( a- k( |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 f* d8 n0 r& p% u
  660. //            colorTemp.SetValue(color.MakeARGB(
    8 E6 {3 t8 Q9 N
  661. //              (BYTE)(255*iColumn/iWidth),
    - c( W5 L5 l8 i/ T1 b' R- E
  662. //              color.GetRed(),
    5 d7 G$ N* J2 r2 v, I  R* k
  663. //              color.GetGreen(),* _7 n0 z+ C2 V, C! H9 k
  664. //              color.GetBlue()));" x: I0 g% i7 M/ K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 J8 q, s  w* P
  666. //          }1 V9 f! X8 m1 G
  667. //        }. R. B4 R' J, P8 a+ l" E; Q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);  h. B9 p6 ^7 l6 m$ Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : |6 k6 }, A  H( a! r6 z: h' x# J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. b% [& g, H( }4 u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ r1 Z. S0 Z0 |: c$ z3 g
  672.         for(i=0;i<240;i+=8)) }+ A  t' F; q# P) t" M
  673.         {
    + r4 u+ L% p+ g  N
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' `) F6 G  t9 _  }
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ F3 S5 x; [& {! ^3 ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) A8 E# m) {/ ]) R3 e
  677.           Sleep(33);
    : x( i1 v; o2 U
  678.         }8 v) Z0 Z6 B0 j- _% b9 M: Y
  679.         Sleep(1000);
    2 [  @, S* K: o# j% A) w0 r' G( B
  680.         for(i=240;i>0;i-=8)2 G1 W! I7 o6 S. A7 x
  681.         {5 n: |! J' F4 _& X  B
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ D) g1 K6 `8 [9 s
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 P7 V7 M# R- Z: f. H
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % C; b  B& m+ K2 J  k6 S
  685.           Sleep(33);
    ) w" o; F* r& C7 E+ G: w
  686.         }4 `( W# \% r# n) a
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 Z! R9 _( C; a( Y0 F
  688.         dlg->ReleaseDC(pCDC);9 C9 j, D+ D9 _/ h5 x+ o
  689.         DeleteDC(hdctar);3 r: i! l- x+ f. E4 Q
  690.         DeleteDC(hdcsrc);
    / d0 [2 ?, d0 X; B. l
  691.         DeleteDC(hdcorg);! Y! y: a7 K- B1 \- ^! p7 M# }
  692.       }* `& |( l  T' J# }  R( w1 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  D5 C; W. B. R8 h' n& d8 J/ ^/ X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 P4 b7 g1 G$ x. ]( [0 M/ h
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 ?& _* ?, u% }! M- J
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    - n, B% z  z: b/ r' y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ?, G; ^* H0 `
  698.       if(!Dn.Connected())
    & q- C, J, \) o2 q* G
  699.       {8 L# {1 u( G' H
  700.         dwTotalFiles=1;, T8 l6 C4 p! R8 C* Z2 a. k7 C: T, P
  701.         dwDownLoaded=0;# K1 b! n1 h2 ?/ B  ^+ y( P
  702.         bSilentStep=TRUE;
    - ]7 h" I; T. x6 `  G' w
  703.         bCompressed=FALSE;
    $ b+ S/ f7 s! y" @8 l6 d  h
  704.         strExtLocal.Empty();
    * W/ g2 Z4 a5 k7 P1 l# X2 o# w
  705.         strFullName="readme.txt";' R$ r) c; }6 s8 w
  706.         dwProgramState=AP_CONNECT;
    0 y' O* k. {6 ^5 v) }6 x
  707.       }
    % r& |. T6 a9 [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ {5 N, l  h* p' \5 V
  709.       dwStartUpSteps=2;
    2 ?6 W( ]/ n, U% G2 Z
  710.       break;9 `- {) o: ^! c9 W% o# Q% f
  711.     case 2:
    7 ?) t0 I2 }& I5 T
  712.       {
    2 o/ n0 z# a" i6 h
  713.         int iEOF;
    5 M3 x9 }# x9 c* K
  714.         FILE *fp;: r2 A6 [% }% C& s+ K
  715.         char szString[512];7 Q2 S1 w5 {& F7 J) G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, ]4 l  E2 J2 X0 c9 f& i
  717.         if(fp)
    - m5 y( p3 e! O; W- D+ j
  718.         {# e; e# s) e9 y9 [
  719.           do- q; A# c* M- V+ a& q0 b: V  n7 F; N
  720.           {# Z+ S3 b8 p' i# v8 n! x" H
  721.             iEOF=fscanf(fp,"%s",szString);
    3 O% X# E  }0 ]2 P+ W+ D) I
  722.             if(strlen(szString))" i5 S+ |# c% x9 K; _
  723.             {% Z' n  {. R: U/ |/ k" r
  724.               if(bFirstChar)  i( y$ h, o& s- ?3 }& ]1 y: G
  725.               {# l& }2 T4 o8 C$ m0 s
  726.                 bFirstChar=FALSE;2 M* ]- G7 q/ W/ s) j
  727.                 bConnectIsBig5=FALSE;
    9 ]3 R: V5 E, [
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 F2 M4 J5 d. P# q
  729.               }
    8 r$ q! ^3 z1 y: D! }6 y9 W" M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 p* ?. }0 G* ]3 M* }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; K  S8 [2 }) P. p' c8 _
  732.               dlg->m_ListText.AddString(szString);
    2 _& a: _! N# w1 n2 M4 d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * o( k. i9 i6 i: d1 C
  734.               *szString=0;1 Y$ ~% M; M1 A* E( }  X
  735.             }  s: m- v8 I( j1 {" p- v$ R# d- `
  736.           } while(iEOF!=EOF);4 s+ F) `8 k" m  X, c, ^
  737.           fclose(fp);/ d" V1 Q- }3 N1 x# F
  738.           unlink(".\\DownLoad\\readme.txt");
    ; z+ t/ L- C/ {' s
  739.           dwStartUpSteps=3;, P, u7 n; M* e* G1 H
  740.         }
    0 d0 w: F1 M+ z& W- h% K
  741.       }
    / b# m& u$ J. Y; X/ P
  742.       break;
    5 D  p/ ]2 J3 J, b* |$ D! A
  743.     case 3:
    5 h# Q$ w4 y: I6 g0 R8 u, ?+ H2 v% O
  744.       if(!Dn.Connected())
      [3 b& n) ?% R3 ]0 V# U- P
  745.       {
      D8 u8 D# l& E4 J+ v3 M, o. T+ i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + v6 E4 X" V: g* i
  747.         dwTotalFiles=1;
    : n: k, O6 M  o* u. ~
  748.         dwDownLoaded=0;3 }! q$ m/ e, |, H( M2 x
  749.         bSilentStep=TRUE;
    " e2 a4 V; h+ |0 J* e2 g
  750.         bCompressed=FALSE;
    . C; X% ^2 G. I5 S4 [0 U; z
  751.         strExtLocal.Empty();
    ; G" M1 K  e  w. B( N# J
  752.         strFullName="checkversion.txt";% u! N# o  [2 g6 `7 F3 {* a
  753.         dwProgramState=AP_CONNECT;; _# K' O9 X2 v5 ?9 B
  754.       }
    " R  c/ N/ [9 Q6 ]4 h
  755.       dwStartUpSteps=4;6 u$ v6 m+ B! d1 ]* q8 k: I4 v
  756.       break;; |2 `5 V# ]& ]! K1 l& b
  757.     case 4:% U" F$ I' H% y# j# v
  758.       {
    6 f! J$ H$ T9 o% L+ R9 w7 Y
  759.         FILE *fp;
    3 E* J( `) {" R8 l' U
  760.         char szString1[128];) ?2 O$ G! |# R' m+ M
  761.         char szString2[128];9 t3 X# N. K. P1 w# l3 X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");& ?) a9 \, R0 L% C6 C, v
  763.         if(fp)
    ( }0 L. U2 ~3 a# p$ n$ ~& E
  764.         {
      b. r' k  @. K9 h5 Y: C
  765.           fscanf(fp,"%s",szString1);
    8 }7 J/ N( |( W
  766.           fclose(fp);
    8 R4 {( r& U2 u5 V! _4 U
  767.           fCheckVersion=atof(szString1);
    3 B% W3 d, i& M0 O  B+ h) ^8 D
  768.           fp=fopen(".\\checkversion.dat","r");
    7 o# A9 k; G4 E$ H
  769.           if(fp)/ b; d3 ?9 e% l  n
  770.           {. B: f* L6 \9 `9 s/ n
  771.             fscanf(fp,"%s",szString2);
    3 }' r7 f" V$ O7 q3 u1 s
  772.             fclose(fp);
    8 q5 P8 W9 g. Q' k
  773.             if(atof(szString1)!=atof(szString2)), X5 G' w, E# a  ~
  774.             {
    5 C1 c  S  `* V. W4 V
  775.               if(!Dn.Connected())+ ?  Z0 ]% w$ P; Y
  776.               {
    6 t! h, h/ R, T( ^$ m: M. v9 q9 `" G
  777.                 bFirstUpdate=TRUE;
    1 [, R( u# N# L/ ^6 K$ `1 |
  778.                 dwTotalFiles=1;9 K! H7 |: H% m
  779.                 dwDownLoaded=0;, v4 g# Q1 N5 A( i
  780.                 bSilentStep=FALSE;
    " R6 r7 H/ S1 U; f# H! U8 X
  781.                 bCompressed=TRUE;  {1 \: ~# N! u8 X( k8 e
  782.                 strExtLocal=".\\DownLoad\";
    , \. T5 i# M, E9 f& c. |2 V
  783.                 strFullName="update.txt";
      @* }5 u5 m( [& [! y- F3 k- U
  784.                 dwProgramState=AP_CONNECT;
    1 e. f: ]- e# o8 s. P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 |2 d( v% M% A0 \6 `2 V3 a. n5 o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / X0 A- X! ]2 h0 y$ i1 r3 D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' S7 L- O4 C5 c2 e: m. s( ]

  788. * l" y8 R$ Y( [; e5 Z( q# ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( {0 ?; o/ B& ]& |$ u. B
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    # C( Y: _1 S0 n3 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 ]! Z/ u& [6 k4 ^2 l
  792.                 {+ k$ f% C) T& q5 d% |2 r# P
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 L& v/ x3 n' J$ _, J7 A
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 n6 U! e& r9 f* T# S$ v  L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % r, N7 i' F) A) W  g
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* i/ }/ G8 E# Z* x5 h, I

  797. $ F" @" f& V. H% u& G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! }5 @& g  a6 z: Q" E" _9 F' R/ U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) h& Y% E; {( B" ]# }( M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - x& i* K$ n9 Y" |) n: ]
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 g! f; w8 u3 a" o* ~' N! R
  802.                 }9 L) j" w( i: _  Q6 l7 D
  803.                 dwStartUpSteps=5;
    7 M/ E& f  y$ _% P- y( A+ ]
  804.               }! Q, T) ~! c4 y- s3 w$ k
  805.             }# b% m+ x! a0 L: G! T
  806.             else/ f, h- s7 n) W* e- e
  807.             {$ t1 f* p% a' H; Z: ?% U+ W
  808.               unlink(".\\DownLoad\\checkversion.txt");% g, j1 R0 _" l1 N4 M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 O7 U+ _. o1 E3 ^1 r. D
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 K3 ]4 G5 }. H8 p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    . `8 d  k( _& G" f1 C: Q# O$ j7 s4 {- r

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

* f5 h7 r% h; _1 q

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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