找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
8 ?' h+ _% ?. {2 F. S+ c
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 Z; n5 V2 G3 |, |7 J
  2. //# t; [7 g" Y# h) m1 }
  3. 4 [" p  O# N* q: d" x& y/ v
  4. #include "stdafx.h"6 y/ g' f! w; f3 ?) v

  5. , D  W; |! ~7 t/ V! @& C
  6. //#define UNICODE
    . v( M  e& y2 j+ \- E
  7. //#include <gdiplus.h>
    ! \' a( X3 V- F1 f6 U
  8. //using namespace Gdiplus;0 V9 F% V1 V+ y% U, Z; x& D3 D

  9. " X" W5 v* v! e$ W
  10. #include "RevApp.h"
      ~; _# t, B) Z7 C- x1 C
  11. #include "RevAppDlg.h"
    / d( D. S2 ?+ A  t% X8 |+ P0 }

  12. 2 [) W9 n1 o# k
  13. #pragma warning(disable:4786)7 @  C5 `% B) s0 a$ o' ?! B
  14. #include <map>5 q: l0 @# l/ _7 @" y
  15. #include <list>8 k2 Z5 a4 C- H( T2 B. t
  16. #include <direct.h>
    ! W; F. u" ^9 G$ `
  17. 4 L/ h8 X: |2 S4 }0 g3 x
  18. #ifdef _DEBUG
    - ~- r3 X0 H1 k
  19. #define new DEBUG_NEW
    + T' C7 S* z' c: a; J# ?
  20. #undef THIS_FILE* L+ ]; _) T$ V) _- P" n. ]
  21. static char THIS_FILE[] = __FILE__;" b7 S7 R5 E0 y* w8 Y
  22. #endif% }& s; e  x+ [6 I
  23. #include "SkinResDef.h"; J% c0 ^; T' B  D6 `5 e
  24. #include "ChangeBG.h"% {4 z$ o' ?6 N
  25. #include "AFXINET.H"
    9 ?; J5 @" t5 w. S; c0 V, r
  26. ( V, O) n# o9 N, f! C" [2 b, c) S
  27. #define TRADITIONAL_CHINESE 0
    " Q8 _  v, X( c8 [# p
  28. #define SIMPLIFY_CHINESE 1' c, W2 U8 C4 \/ P7 ^: t( a/ K
  29. #define ENGLISH 29 J7 j6 |6 \2 R2 T& c# F
  30. int m_iLanguage = ENGLISH;: `! Y6 D( l& N  p
  31. /////////////////////////////////////////////////////////////////////////////* r. M% Z: R/ T- n$ p/ C9 x
  32. // CRevAppApp  f8 u' U! L  H  F: J$ c
  33. " s9 E5 U: S% y7 M% q9 x
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % q0 {1 V4 V' A2 P, J5 v
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 y/ e, @9 U0 x. X9 A7 D& X
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 ?6 x' G, g( t0 }( |5 q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 X: A- `) y4 a9 C8 A* _& S7 ^
  38.         //}}AFX_MSG
    ( k" ]* y( F* [: K% G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* j4 Y# R. h2 C" D& f2 y2 T
  40. END_MESSAGE_MAP()- h& {- Q1 u0 e) ~. O

  41. ) U/ I4 L7 V5 y+ k( x# _
  42. /////////////////////////////////////////////////////////////////////////////, z& O9 b# x4 B  `# E& L; N; X
  43. // CRevAppApp construction
    # {2 y- V7 \# x9 {
  44. ) ^( n- S$ e3 E; j( C: T( w
  45. CRevAppApp::CRevAppApp()
    * f9 L6 P- S/ |6 y* r# E1 p  x
  46. {6 V  T  `5 S4 Q' Q/ A
  47.         // TODO: add construction code here,7 Q/ Z, X+ W: X* K5 }
  48.         // Place all significant initialization in InitInstance
    * ]; Z" i. i( }" y1 e
  49.   bDisplayIsBig5=FALSE;
    ) u2 A2 Z8 y; [& O9 ~
  50.   bRestartUpdater=FALSE;1 X* V- n, ?* D% d) W# P4 C! l
  51.   bFinishUpdated=FALSE;
    ) K6 @7 D- g) N/ U: e; m
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 r) T& r- [' t' u" o# l
  53.   InitChangeDataBig52GBKS();
    ' B) P' g' N( ?6 s
  54.   InitChangeDataGBKS2Big5();
    ; L) G5 @) F6 C- z
  55.         //
    + v+ P. r6 r! U3 i2 D
  56.         bClickRunExe = FALSE;4 Y- z% Z5 o- n
  57.         //! k! z- v# [3 F) {: U% v" o3 b
  58. }" p6 O/ O/ R: A" O
  59. " y% F$ J2 R# k$ Z' @9 y9 H
  60. CRevAppApp::~CRevAppApp()- G2 X0 t$ V4 I1 K3 p
  61. {7 ~, [: y3 s* j
  62.         // TODO: add construction code here,* q' e# C; w# M
  63.         // Place all significant initialization in InitInstance, n' F# G! ]! l/ P
  64.   EndChangeData();
    " d/ w/ _' T/ b3 u- K
  65. }* J6 _" r+ A! Y

  66. 3 u/ ?) T; H( t% c" p
  67. /////////////////////////////////////////////////////////////////////////////3 w; Y3 U  c$ T5 }, T# T8 i
  68. // The one and only CRevAppApp object! l4 ^2 [$ ?9 a

  69. / F3 d9 E6 f& \+ E  N
  70. CRevAppApp theApp;
    9 b% b7 v  l- |* k3 k

  71. 8 v, h5 }& Y, ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 ^6 ]; z& @! }, ]
  73. {
    , \4 o: F: v* {: X: W
  74.   int iEOF=0;
    9 ?' I. O- w- I+ R2 v5 l& C6 _- J
  75.   char szTempName[MAX_PATH];
    ! y( u  T2 I3 Q! `2 ]8 [
  76.   *szFileName=0;% x( Q; s6 B! Z! [
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 e; h! W; m- k6 o0 p& K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ \& t4 E5 Z1 W! r' M
  79.   {! h- c; u7 z9 n# o9 m4 c/ m! d
  80.     strcpy(szFileName,&szTempName[1]);, Q, J- o: t/ f
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 b; o* ^& l  {8 K
  82.     {
    ' U& M/ U! A2 z  q( X
  83.       iEOF=fscanf(fp,"%s",szTempName);8 q' c; ^& ^7 Q+ M" D' Y
  84.       strcat(szFileName," ");
    9 ?3 z/ `% Q) M/ K9 V
  85.       strcat(szFileName,szTempName);
    9 F* W- I: x( s0 p
  86.     }
    * |% s3 W, J3 s% R. K1 z7 K& m1 U
  87.     if(strlen(szFileName)>=1)
    + d: o' E  ^! _! w( Q4 D- T
  88.     {
    0 K( A* A  p7 S1 p" Q0 M2 L
  89.       szFileName[strlen(szFileName)-1]=0;9 ?  ~' N  S0 f1 t
  90.     }( b& W( e* w: w
  91.   }
    1 @- C+ U& @6 `; x. \
  92.   return szFileName;
      [% ^& K7 P2 ~
  93. }% X, t  Y7 \- T/ O
  94. : D5 J3 g' j4 m/ s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# s, S# b8 L4 |, z- D2 I
  96. {
    $ Y( f8 w7 B7 \1 [& v
  97.   FILE *fp;
    # `+ d1 }) @( l7 ?
  98.   char *key=NULL;6 n! D" S# h3 s
  99.   char version[MAX_PATH];
    ; n! V" n$ c7 i# Y+ z% S5 a) u# l
  100.   LPUPDATEFILE file,olds;( g2 k& a; y% Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / `; K- T- Z7 x# ]
  102. + A# l' P; i% P0 m% ]
  103.   UpdateList.clear();
    1 j) ]0 ?  F$ w" b
  104.   UpdateFile.clear();: T) N  U9 I% j+ u) M# O0 K" b, n. V1 ~
  105.   if(GetFileAttributes(filename)==-1) return false;' }0 x- L5 s# p6 q7 }
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - {+ @" G) m1 [7 u, `( `* i
  107.   fscanf(fp,"%s",version);
    . k8 F7 _' [5 |5 J5 ]; Z# J7 }6 q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . N& N5 W& U9 Y+ V
  109.   while(fscanf(fp,"%s",version)!=EOF)* b- v% e7 Z# y
  110.   {$ j5 r% o, k0 q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  C4 L! [) b+ f5 P
  112.     fscanf(fp,"%s",file->path);4 |- @! l  d% U' E4 N
  113.     ReadFileNames(fp,file->file);* |+ M; t# O' ?# a5 V& R- y4 n+ d
  114.     strcpy(file->full,".");. Q+ Y: ~) q  j6 c  ?+ e
  115.     strcat(file->full,file->path);
    : ?1 w/ ^" w' l: B! o
  116.     strcat(file->full,file->file);$ Y# |- }+ q) I( m/ F* y1 l; K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    " P5 {1 a: E8 A" K" g4 _
  118.     {5 u# R% u0 i0 K* v2 J3 a" z% W4 O
  119.       file->vers=(float)atof(version);' h+ G+ Q$ [; ?0 S
  120.       UpdateList.push_back(file->full);; }  {$ H! F2 a. q- ]: k4 Z0 `7 }
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: m5 o1 ]  j) w( H, P* U+ A4 N
  122.     }
    2 O# z: f7 S/ [+ M$ b9 Y
  123.     else! @2 _; w5 j0 {/ S  R3 |
  124.     {) i3 r- ~( f, x
  125.       olds=(*p).second;# D$ m6 o4 _$ ?9 h* |' E
  126.       if(olds->vers<(float)atof(version))- n5 Z; G  r1 n
  127.       {
    ! X1 Q9 T9 L- Z. `& V
  128.         olds->vers=(float)atof(version);. L$ P  O0 [- A) y; Y
  129.       }; g, ~& Z9 n* M: v* j9 D* T$ D* X( X5 ~
  130.       free(file);, I( ]+ D8 o) G! z% S5 r
  131.     }! H+ R) h9 I$ S' K- A
  132.   }
    & v$ p' x- K% U+ S: }
  133.   fclose(fp);
    7 ~, @* T) n% F6 d
  134.   return true;
      e! v4 O, ]+ _* {2 N
  135. }8 C8 x/ F! B/ o: ~1 Y* ]1 Y  _0 U
  136. : n$ N3 C# g- M3 d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / x  a* {" X) C' J* P
  138. {
      }8 j' H8 o+ x0 k
  139.   TCHAR  szFull[MAX_PATH];6 p$ g& m3 t$ e: P& j5 X2 M+ j* v/ B
  140.   TCHAR *token,*inter;/ F1 Z  d& E) n. l
  141.   *szPath=0;
    . z3 I5 Q+ S, r* F% j
  142.   strcpy(szFull,szFullPath);- q9 \5 V0 t; F- C9 [- Y* R- X8 D
  143.   token=strtok(szFull,"\\/");( r% ?; p& A9 M+ S& g8 l/ ?
  144.   inter=token;
    ' ~8 S: J$ e  m
  145.   while(token=strtok(NULL,"\\/"))3 k) y  m3 v6 z- T" G
  146.   {4 G% m* S3 i( h. L' e  T
  147.     strcat(szPath,inter);/ S. A0 i8 j; N4 s
  148.     strcat(szPath,"\");
      f4 _1 }" w7 x5 z. j/ W
  149.     inter=token;' I* U# J% N/ N' A4 [4 i
  150.   }8 a! [* v. x) @/ W( |! d7 I
  151.   return strlen(szPath);2 O0 e% _( q+ G6 c8 b. I
  152. }/ r- H: z8 ^" e1 a

  153. ; [3 {) k6 c* E6 C* \+ R9 h9 O; P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)( o- E$ @1 D# I3 Y- k. l
  155. {
    3 y2 N0 b( q$ K- U3 q! m. e
  156.   DWORD attrib=GetFileAttributes(Target);% ?5 b$ Y1 y. @0 l; x
  157.   if(attrib!=-1)
    ) V. @( n/ ?% n& c6 k
  158.   {
    ! I$ y  z2 G! B4 l: @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" q% s& y6 y$ ?0 L( W1 K/ `  P
  160.     {
    4 o. @  B' ~8 i- T- K  u. J. _1 s) o  e- y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 q# \$ ]( e6 w& q, d* x
  162.       SetFileAttributes(Target,attrib);
    , Y1 l8 V4 u5 E& i$ @
  163.     }5 M- B( Y. j5 a( c, f
  164.   }
    5 J; `$ L9 @" [6 d+ n
  165.   CopyFile(Source,Target,Erase);2 g. _" O# r5 b; x, w3 b% t
  166. }
    ! f- F6 e1 j; u3 u' w$ F& k+ r

  167. 8 q( W% {& T3 I4 _0 n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% s1 F2 @9 [' X
  169. {/ w# o4 J" b2 v6 V, ]' R
  170.      FILE *fp;  a; m4 D* j2 E7 E7 p. p' W7 F
  171.      char  szBuffer[8192];( i$ L9 }. V9 W8 M' D) ~
  172.   va_list  argptr;) Q7 f, y9 a8 U; ~$ I6 t. u
  173. - {+ Y' C, Y! ?( D8 b) P# @0 H
  174.         va_start(argptr,message);
    % q  x) G1 Y9 E$ K  c
  175.         vsprintf(szBuffer,message,argptr);( G/ F/ g1 I, p6 A/ x0 R
  176.         va_end(argptr);
    # |8 c9 ^% K8 x9 p
  177.   fp=fopen(FileName,"a");  r( K2 a7 F. {% x
  178.   if(fp)
    ( H% U; [! C8 G) ]' t
  179.   {
    6 y- _8 o2 Q! @) X
  180.     fprintf(fp,szBuffer);# j6 I/ a  K8 R8 A+ m; l. S
  181.     fclose(fp);4 ^8 ?5 q* Q7 z: l1 U* U" `
  182.           _flushall();
    5 @% x, s& L0 T+ W; i- S
  183.   }8 ?# h) T: T* x# D" j* f
  184. }
    + T6 i9 x3 }& K! ~# v

  185. ) s& k6 P- ?4 t& n/ o. L, @5 R
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      L* j0 j% c& z- F4 N# ]8 d
  187. {+ {! ~% Q6 K) V7 ]8 {5 o
  188.      FILE *fp;2 g" f; d) S2 N5 V7 o0 i
  189.     DWORD  attrib;" S" ]# j' u& n3 P) j9 O# h
  190.   attrib=GetFileAttributes(FileName);4 M/ z! w$ ]/ P& \: e4 h
  191.   if(attrib!=-1)
    2 R6 s1 c  q1 F
  192.   {
    ( R2 }  P# x+ g  ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# K8 }6 o& h( ~7 x- g# K( a& ~
  194.     if(!SetFileAttributes(FileName,attrib))& l: u  G. `/ m9 T% t
  195.     {
    ) A& r( A. _4 V3 i  `- L
  196.       return FALSE;
    8 @# M6 ?8 e1 G+ {/ B: l# k
  197.     }
    2 v4 F) w+ G/ C+ y4 [
  198.   }; r& J6 T5 s) y1 w  N/ b  }7 ^
  199.   fp=fopen(FileName,"wb");. S- _  r7 Q; F' A8 H8 {
  200.   if(fp). S7 P! G7 _+ p' B: R
  201.   {
    + i: _5 p9 X. d6 W' P2 \
  202.     fclose(fp);9 Q2 A' O8 k+ f! l  X* X' M- [
  203.   }( P$ k3 |5 H3 i9 x2 [2 f
  204.   return TRUE;
    & R4 E4 E( T9 M0 x# \
  205. }
    4 [, W" A" Z( k" t$ k1 a- A
  206. / I. {, D/ l: Q% W2 g
  207. BOOL CRevAppApp::UpdateLocalVersion(void): Z/ [) a$ }/ T* c: B6 d. r0 Y
  208. {
    ; t/ f) f! L- F2 Z2 W% I0 m
  209.   char filename[MAX_PATH];
    # y7 `8 f7 u7 \# h9 \/ F
  210.   LPUPDATEFILE file,olds;
    ! f* N2 @" H$ Q7 Y9 }$ Q4 D) Z) ?4 E! ~
  211.   std::map<int,CString>::iterator i;
      S, R: _4 F8 q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    # C( b; L1 Q" X! ?
  213.   std::list<CString>::iterator l;
    : i/ ~4 g4 J# \7 d- }
  214. ; C; J* K) i, e6 i9 c$ g# r) N
  215.   if(bFirstUpdate)
    ) p, W& m9 [6 V% G
  216.   {% [& p" k4 ~% R6 `$ B
  217.     dwCurrFile=0;, ~. J% j+ p( h' E" D
  218.     bFirstUpdate=FALSE;( f+ F" ^. U9 @1 U# G& J7 F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- e, G, U' P0 Z
  220.     {
    - m/ _; i/ \% v: L% w/ {
  221.       dwTotalFiles=UpdateLocal.size();2 {( p6 m4 z) m; B8 I0 Z/ ^5 y# X
  222.       dwDownLoaded=0;1 U' J$ B" N+ M- r2 q( b+ X4 E* {
  223.       bSilentStep=FALSE;
    9 \% e. t  ^. |( }6 a. p8 w
  224.       bCompressed=TRUE;
    + `4 ?7 g7 P" m# o) ]$ a
  225.       strExtLocal.Empty();
    5 C$ {: v* v( l" a
  226.       strFullName=(*i).second;
    5 T3 E9 `& ], c
  227.       dwProgramState=AP_CONNECT;5 M- F) g+ U3 j$ a& h' T
  228.       return TRUE;3 g1 W! |% L8 r- x+ M2 o
  229.     }
    " u. d7 R# c$ A+ h
  230.   }7 S. x, `+ s2 k  w) A
  231.   else if(bRestartUpdater==FALSE)
    1 Q2 _( b! i2 g9 ^& ?) C/ f: B7 @
  232.   {
    8 e( W' l% Y! ~# G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), n  Y; z! [+ `; Z% b  N
  234.     {5 Z+ N% S! ^( ?8 j# {6 i
  235.       file=(*p).second;
    ; d* x+ z: p, P+ N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ `* A8 s* ~/ r! q
  237.       {
    ( D5 y8 F1 Y2 V( U/ U! R& n+ J
  238.         olds=(*p).second;' z2 Y5 _# Q3 f% y: Q
  239.         olds->vers=file->vers;* @8 ]3 K% X" B. j: A3 F, }& Q, U
  240.       }
    / M2 f4 s  m" n7 k, X- O" H) L! E- P
  241.       else
    4 j8 ?. x% o( p) R6 H1 X* u  h
  242.       {
    ; i) z& r  \' ~; Z, h
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 i4 E/ ^7 E. R: x% V; Z1 m( l. d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));: ]$ m& d% Y* X5 \" W- k8 d8 H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 {" g( h6 I  P2 {  a
  246.       }; K5 w: e$ ]: X! t" ^+ g+ Y# h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");) w$ V5 R) u$ k. E
  248.       sprintf(filename,"(%s)",file->file);$ H8 H* z0 m5 e/ T2 y6 S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * X6 u! k: L9 @1 O
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) g/ B9 K& V4 G0 [0 a" c8 N
  251.     }% a# |8 C7 [$ q. p+ P/ G9 O
  252.     dwCurrFile++;$ f; w" s, ?( v, T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): B6 a! D/ L+ Y8 d
  254.     {( [2 D0 s$ Q5 X, e3 B8 o
  255.       bSilentStep=FALSE;
    ( U, `) D! m7 N" t: C0 I  u$ m6 ?& G
  256.       bCompressed=TRUE;( u! M% S) I/ K' D% u( b
  257.       strExtLocal.Empty();
    * `! ^  ]9 ]; _
  258.       strFullName=(*i).second;: \; @% `2 j, W' Z* g7 A9 H
  259.       dwProgramState=AP_CONNECT;/ ?! \- U, n% Q5 D% s
  260.       return TRUE;
    " `' w$ _  m* n2 e/ p; x$ P
  261.     }
    / y' F+ [8 ?, ?* F$ w
  262.     if(!bRestartUpdater)
    ! t5 j% W: H5 S' G6 P# @0 U! G
  263.     {" p6 c  E6 a6 Q; J1 @& L
  264.       int iCurrSize,iFileSize;
    5 ^0 a9 U2 ?  }/ ^: |  {7 p2 Y( S
  265.       iCurrSize=0;
    6 L& G4 s2 E' i6 K; m; }
  266.       iFileSize=UpdateList2.size();
    * |9 x3 o7 t) Y5 i( \. F( x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");" [1 t4 |& e0 N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 G6 v1 c( G' ]1 I9 v; h! E
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 I" N* ?5 y, D1 k1 h4 q& ~
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 x- a+ G( a9 e$ B. U; L( n
  271.       Fclearf(".\\update.dat");# N: P7 \) k9 N
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 X# _7 R7 X- H& ~+ y& N
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 S$ _/ B- U; J* |& {
  274.       {
    : [! N9 M+ I$ O' s: ]  I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 s" ?4 C( \* `. M, L& v' u
  276.         {+ k1 N7 J$ l  v! ?0 i( F8 R
  277.           file=(*p).second;) e+ a5 a; h/ M+ R+ D
  278.           sprintf(filename,"(%s)",file->file);7 W/ m5 B+ @* u* {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 b& ?7 e8 D7 D- w; d
  280.           iCurrSize++;: L8 i5 ?+ Q4 Q  k3 u$ j1 n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: M  W0 y- j. ^4 L# P+ o' z
  282.         }
    3 Z* E& X1 m0 i- E
  283.       }
    0 H7 A9 e" \+ z( P& U8 i  W! o
  284.       unlink(".\\update.txt");
    * e) p; y! o" d7 z5 }0 K$ }; ]3 h
  285.       unlink(".\\update.tmp");) F7 k* c9 Z3 `8 Y( j, M
  286.       Fclearf(".\\checkversion.dat");
    ; p: W( q2 I6 P5 M: X( k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
      U9 I6 H) ?3 |
  288.       if(UpdateLocal.size())
    9 w3 G3 q! S8 ?( i& z0 ?7 A
  289.       {/ P8 K% A8 ~: _
  290.         UpdateLocal.clear();3 _: t! T2 g8 C* Z% l! }
  291.       }5 @1 P9 ^% j- x2 [, c
  292.       if(UpdateFile3.size())
    ' ?% E; j8 y( x! o
  293.       {! G+ Y' w- M$ O3 ?( s# K0 w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( r$ Y& Y  q! v% t, q9 l
  295.         {: B8 B) A! t. D. j* g$ X4 r! Z$ |4 O
  296.           file=(*p).second;
    8 P  |; X+ [4 W. w, V- n' y2 T
  297.           free(file);
    ( x$ S3 }$ S/ O  _! f" R
  298.         }0 D2 D) \  H0 I- s- h* Y1 s
  299.         UpdateFile3.clear();
    8 V: i- |  \! Z- C# D( E* N
  300.         UpdateList3.clear();' ^& s4 u& \& h) a: C
  301.       }4 H6 d: J( t6 U: v5 ~" w/ n* e
  302.       if(UpdateFile2.size())2 H3 j5 p, u2 @1 B* Q
  303.       {1 S5 W" b' J5 b* n# W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 o1 P8 Q: S, w$ }2 m, Y) P) Z
  305.         {
    5 a6 h% [2 ~. E& q" r, d
  306.           file=(*p).second;
    ) v" D! w3 Q- ?' e6 l
  307.           free(file);
    ( j8 d0 K* {) B- k6 d  F) s3 b
  308.         }
    0 e8 F$ [3 i5 l$ O& R0 c5 _6 g
  309.         UpdateFile2.clear();4 x( P1 u3 M& v8 V
  310.         UpdateList2.clear();# A' V, y* ]' L9 l+ L! T9 k8 a3 P- f
  311.       }/ K: c8 o, i* @" o+ |" ~1 `
  312.       if(UpdateFile1.size())% v* C" B" E( z$ U5 k5 t4 k
  313.       {3 T4 h+ e0 ~1 w  Q' X! v3 B& P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , s- G2 p! z- M8 r$ C8 K
  315.         {! P8 S* Q0 x( [( r+ V
  316.           file=(*p).second;
    # i% t! S  ~8 Y5 ?3 O5 p
  317.           free(file);$ J0 F* E7 R+ ]: X% E8 C
  318.         }. {* g5 Y) f. M8 n% {
  319.         UpdateFile1.clear();
    ' v4 ], R$ I  J( N5 P# S' D+ D; a
  320.         UpdateList1.clear();
    3 r, m4 A6 z7 Y  S7 N
  321.       }. x9 z& ], e$ P, G" h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 O/ D- B7 o2 T& j4 X6 t4 g
  323.     }4 C1 d: a& R8 R6 r2 ^8 O
  324.   }$ R& _0 ~2 V. z( q( L: z- k
  325.   return FALSE;4 x) M* F7 I- m
  326. }2 r) l/ n& }1 }3 Q- d" [+ k' L
  327. % T/ Q$ S/ O: }- a  h+ q6 Y8 B
  328. void CRevAppApp::ClearAll(void)
    . J, V' [$ f7 U$ _
  329. {. a! [# a' ~; w+ L9 a: ]
  330.   LPUPDATEFILE file;5 }% `2 ?, G* N# R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 |( U2 N/ A. F$ [- [4 R8 V9 J  S$ _

  332. ' L2 n9 G* A! j. e9 C# Y* D
  333.   if(UpdateLocal.size()), m9 P" w$ h. c8 Z" U
  334.   {1 w& _. m% G- V. z
  335.     UpdateLocal.clear();
    9 ~1 s+ T2 D( g& ^0 i( d
  336.   }
    5 r  W- V8 `. [5 I# g) ^: j! K
  337.   if(UpdateFile3.size())# D: j: p' _: B# s
  338.   {
    5 M9 p2 H% c; e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 f, x  {' X% C( D1 j
  340.     {# {$ r$ B/ F4 {8 c: q7 S4 R( r
  341.       file=(*p).second;
    ' l, j+ ]% S( Q' l2 V* `  v
  342.       free(file);4 [; D& z" m  S: Y) C5 e) C
  343.     }
    ' {: {$ L& ^- S6 k/ ]
  344.     UpdateFile3.clear();
      Y$ n: g4 X9 X: g
  345.     UpdateList3.clear();8 W  E% |, Z1 m9 }1 n
  346.   }9 V1 G6 L( B1 \8 w
  347.   if(UpdateFile2.size())
    ' y1 J2 J$ |) r; ^* {$ @' E0 b% f
  348.   {1 B- ~: x4 a. [7 y% V5 h# R  f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 L7 B4 A5 ], O/ B7 x! W5 W
  350.     {
    1 p$ A6 U8 `( g; s' L. A
  351.       file=(*p).second;" ^/ U. N4 H! R# ~# J1 t) I4 Z# ~5 a; R
  352.       free(file);$ S0 D; c8 x6 Q# T2 J9 R6 s: T
  353.     }
    : u! n0 K% t( F
  354.     UpdateFile2.clear();
    8 z8 T5 b  p: s, u  @
  355.     UpdateList2.clear();! w* M' t2 I5 o, z
  356.   }, {& r1 s$ U: y" S8 K# O5 R) k
  357.   if(UpdateFile1.size())
    & Q+ j$ e  b% T) ^+ E' O+ G
  358.   {
    " o* ~, R- J7 m3 |6 j/ a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : |$ e. f& O/ p0 H" j. [% [
  360.     {) z/ a0 }# }. L$ x/ K& A
  361.       file=(*p).second;
    ; d. B2 ?. B3 E. M; f
  362.       free(file);
    ; O2 z& O: v3 h& s: u0 Y) R
  363.     }
      ~9 Q6 m7 R7 A; W
  364.     UpdateFile1.clear();/ z0 ~- A0 X! f) `
  365.     UpdateList1.clear();7 r8 X- m. s* [$ Y
  366.   }$ X& S; u3 f* z4 {1 ^
  367. }  % Y' o3 U* w: a! V
  368.   : N, P% l  J% h4 M
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    : o* q2 F" P, Y4 V) {7 y5 m4 I$ a
  370. {
    4 P$ m( [# K: _
  371.   int c;
    0 ?5 g- U  [- j# T& }8 B
  372.   LPUPDATEFILE file1,file2;2 E; P! `" ?: T0 Z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # q: ^5 t4 l- K3 z: e' \
  374.   std::list<CString>::iterator l;
    6 ?/ T  `0 W( M8 |7 \. W! {5 _

  375. & h" N7 M( C( c9 w( d0 x
  376.   UpdateLocal.clear();# H# y0 l; I2 |) U+ `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 I- _; j  \: t# J& t
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! C- e5 c. o5 Y; \' ^) J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% V0 m# x, a5 n& d6 H6 V, F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 P- W4 e( v. ]) N; `
  381.   if(UpdateFile3.size())
    / ~5 I3 h4 n2 N, n2 `/ X, C
  382.   {
    9 b9 J( l* r  C( S( o. ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 p& q8 X/ F6 r$ [. b8 G
  384.     {! L% T$ X4 g1 F9 K1 j
  385.       file2=(LPUPDATEFILE)(*i).second;
    + o( e! T$ n8 D: s" O1 X0 u
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) N4 v; j& [) V, U5 j# Q8 A
  387.       {1 c% ]+ W9 s& _8 E. T2 d
  388.         file1=(LPUPDATEFILE)(*p).second;- y/ b# }  j7 V: g
  389.         file1->vers=file2->vers;2 @0 P  Z4 ^( E3 ^+ `
  390.       }8 i* p3 r) ~6 T1 J9 i; o4 F
  391.       else2 R6 Y3 E+ L% f" H+ y9 ~
  392.       {
    ; R, q9 m+ V( g- N$ h" R- p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # s7 E( g- F! r$ {& R2 Y3 K1 k" y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# {0 E' U$ \/ m( \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' e' o0 G! R: z0 ^% e
  396.       }1 i  ]$ J8 z. h9 a, V
  397.     }
    / j0 z: Z) @  H
  398.   }$ y& `/ \+ a, m$ c$ \5 {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)* y3 g3 T8 f. F  f1 p6 G
  400.   {3 T2 o; I& t! H2 |6 I) p0 B1 j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 R, j( c& j' d
  402.     {
    8 b. y& P: q5 ~" h, X! N3 F* a' J
  403.       file2=(LPUPDATEFILE)(*i).second;5 x2 n4 Y  `0 P0 s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' P4 F- A" |/ c" y! o
  405.       {
    . ^' g. p, e* B$ Z; e4 i
  406.         file1=(LPUPDATEFILE)(*p).second;7 i, q/ V3 S+ |3 \+ q  w
  407.         if(file1->vers!=file2->vers)
    ( P6 w0 [1 ~6 H4 ^" K
  408.         {8 z, `- t! P/ o3 j0 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; Z, ~( Q0 V7 j) i  u
  410.           c++;
    0 b; |9 `) W9 w  X" q$ h: |
  411.         }
    4 f7 W# ~, \; x& J, [4 O
  412.       }
    7 C' Y: s1 B7 N
  413.       else7 K  x. h0 _0 ]3 ?/ X8 ^! j2 Q
  414.       {) J. G% L8 X6 ~: w) x. J$ V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 ]' x& k3 ~1 }( v/ |
  416.         c++;8 K" Y1 H( M% a. x7 u
  417.       }  ]) }, J% a; ^6 f7 a
  418.     }$ E% M( \/ x* ]. `) H. T$ h
  419.   }5 X& Q  S7 g+ p( O: C+ {" E3 p
  420.   unlink(".\\DownLoad\\update.txt");6 R+ a/ O9 j7 K
  421.   if(UpdateLocal.size()) return TRUE;( f+ ]7 g- P. [' q, b
  422.   else                   return FALSE;0 Y% w# ?: M' J' P# r! b) D
  423. }
    7 n+ p; W# C/ Y+ t7 R% q' M

  424. 0 g% n* G& p$ N+ a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" t( g- G! W9 D# F: \1 D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 R* e+ p* _: U: u

  427. : A# |0 K. k% K1 _/ A
  428. / s; \$ _9 g- D" ]  k! ~. @. O* ?

  429. - u$ ]) I7 r# A! h9 ]
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    0 Z, m9 s: n7 p. C- K; T
  431. {
    , L" T+ M2 Y: N
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( H! n6 N% o: {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# Z6 h- d/ Z+ v  F. U) g
  434.   {
    # j3 q6 D9 Y8 E& x' q0 N
  435.     char szLanguage[50];! \; z( Z& I; f1 r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  J4 G/ B* [; I. ?' _+ b" M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* Q! Z9 p% b* c+ @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      y" y3 E7 K$ ]' o7 g, m! X( x" q
  439.     else                                   m_iLanguage=ENGLISH;
      g* h# l6 g9 B2 }/ P5 W, @# x
  440.     char szRegister[100];
    # I1 K8 {8 f0 P& _* ~( s, N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 h2 {. `3 k5 F/ }# F& o
  442.     strRegsName=szRegister;
    1 N$ w& p/ F3 q! E$ S2 R6 j1 L$ S
  443.     char szPatchURL[100];  B5 [1 i  D3 H) W$ W" W7 J( `0 k4 a& i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, v  U' C. f, \. N3 u5 `! ?. {( [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' T9 Y4 o) s( U0 t2 D8 k* a
  446.   }
    & |! B) p0 y; ]
  447.   else
    + V( n- |+ t* G: v/ Z9 Z
  448.   {
    " M/ {; m* y) O6 N/ m* e& {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 g5 n( r. C! s9 `) |; J2 h: f
  450.     strRegsName=DEFAULT_REG_URL;
    : `. `9 h  T' O5 E' V5 p; q
  451.   }
    6 |9 `' J) ~' _
  452.   if(GetFileAttributes("hosts.ini")!=-1)  q1 R6 U3 A1 C
  453.   {
    : u0 Y3 C$ ]1 T+ s1 Q* I
  454.     char szIP[50];6 ]! j6 e2 X" s9 P# E2 I+ T! G. g
  455.     char szDIR[300];
    # d5 E8 o9 m" }
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ M5 t: b  J; @$ Q$ \% H, d. b
  457.     {1 g7 i. ^* ], W; D( E$ \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * F  M+ G# R1 \0 b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 R; F7 t  u. T$ J/ J
  460.       strHostName=szIP;" h6 G2 h8 P; K! O8 R& r
  461.       strHostPath.Format("/%s",szDIR);
    ; g8 R: g' M8 O7 K6 d4 S
  462.     }1 \3 L( ^6 F6 C& ^* w6 e$ H
  463.     else' a* m& Q$ K  A$ n, B: f; S
  464.     {* i6 ?7 v1 @2 w& E  I; ?0 p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): l; Y7 V: K; X6 M3 s6 ?; o
  466.       {3 a( D2 x9 U8 w  f9 j4 f
  467.         char szLanguage[50];
    / z6 E  w  N) `5 t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: o1 J5 E# B" F- j! a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! D& O* H4 W: s1 Z# b3 m* d1 f" E; F
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # |" X1 j  K0 y, C4 Z! G2 G
  471.         else                                   m_iLanguage=ENGLISH;
    ' s! }3 s7 u2 I: i6 X
  472.         char szRegister[100];% i/ L8 c, k8 L+ P4 l5 w
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 J5 C* P6 O1 ]- z. Y
  474.         strRegsName=szRegister;1 T, p) k4 ?2 O( ]7 M+ N0 N9 @
  475.         char szPatchURL[100];% M! f9 V1 ]7 F% F
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 S- C9 E) E" A) j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) Z  L% o% W: @
  478.       }
    ; @1 q1 _/ }) `8 p. t" P
  479.       else5 N3 o6 r! n$ y$ S% J& u8 L) ~
  480.       {7 x: M7 ~* @4 L7 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 \. u. F1 f/ v8 W8 x
  482.         strRegsName=DEFAULT_REG_URL;& i1 V4 a9 R6 |7 K
  483.       }8 Y- j# c( u- g3 ~! x  d
  484.     }6 J. {' B5 \/ q$ b$ o  d
  485.   }
    0 C7 P1 ^7 b. Q) ?* ^* R7 D
  486.   return true;! M6 V0 ]: w/ ?  }# J7 ~6 j3 V
  487. }
    & t1 L& i4 I. \% D- U& U
  488. 6 g. G. u. a# g* x) [/ J# y
  489. #include ".\ZLib\unzip.h"
    9 y  {' M: k# |/ {7 g$ d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);2 ?: x1 X, n9 t& X$ u
  491. /////////////////////////////////////////////////////////////////////////////
    ) _" i. n1 ]3 \" n
  492. // CRevAppApp initialization) L# c' e& g7 m2 m: I) Q! S' K" ?
  493. % _5 M' v7 B+ `" \+ K; c
  494. BOOL CRevAppApp::InitInstance()
    " r* j# g6 l6 T
  495. {
    : f; |6 A) X; d7 ^! F; S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ) t) x4 k& z+ N

  497. . T! Y/ N8 m  a" u8 \1 k# S+ B0 Y& e
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ c; y3 X1 A# X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- s. E  E( ?* I5 H  }( I
  500.   {8 k1 n. P' ^0 Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( W2 \6 C5 }% n0 f
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' N9 ~* k- E* F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), |9 l2 v% {+ i) ~
  504.     {0 n7 l6 U6 M" w1 R8 u
  505.       strcpy(szPath,szPathTarget);
    ' F4 c/ |! c: S7 ?& g+ l2 L
  506.       SetCurrentDirectory(szPath);( v" F* T: R$ f( O6 }
  507.     }
    9 G1 C2 Y: Q0 Z5 r" |
  508.   }
    ; \/ E, p/ q. x8 T
  509. #ifdef _DEBUG1 u& g# b6 l1 v* r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ g% f0 [- W, j" o1 V, Z' k
  511. #else, ]: Q3 F% x+ ~% P
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( Z, R2 H/ g; K! k. f
  513. #endif8 {/ F( B" F0 D2 @
  514.   {( t' G4 h% u, M! B+ P1 v
  515.     char tempFileName[MAX_PATH];! V7 D( f/ t4 a8 M0 C9 ^
  516.     strcpy(tempFileName,szPathSource);
    $ a' q9 @9 z& |6 D8 m7 F) `
  517.     tempFileName[strlen(szPathSource)-12]=0;) D) s* n' E' S! B! D# I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : [3 i2 b: g7 i& D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 C  [) K* {* A; i" d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 R0 Q9 Q& [) `) h4 h1 f2 J" C2 O
  521.     return TRUE;$ }9 M7 `* f4 o6 e: I/ p
  522.   }6 E: o+ H* y0 ~: {: v9 i& I
  523.   // Nuke 0118: Delete run.exe
    5 }; M; v' u0 {# Q9 K) f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 D0 y) U! @0 R/ K, I7 j" N3 k9 o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 `9 W# {# I& q$ j& d7 i
  526.   if(!ReadCfgFile("Config.ini"))
    & W' f& a8 [* C0 {! w# R
  527.   {
    6 `6 ~; c* c) a7 X  [
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" q' g  Q" ?/ f6 c
  529.     return TRUE;
    + Z9 }% |) n- ^
  530.   }
    / A5 Y) d2 f2 v
  531.   HANDLE mutex;6 y3 j; [2 t( p/ H% j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 Y1 H2 n( b4 u
  533.   {4 _. `6 t! o& S' {6 Y( z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 R" i8 H& o' W1 L9 k* G) \
  535.     {
    0 h) X2 G# m7 X
  536.       CloseHandle(mutex);
    1 D) s/ H- f5 [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 u) F) k) K! o( n
  538.       return TRUE;
    5 J0 j# h" ]  v
  539.     }
    " C. C4 n- B  E4 w1 L* c
  540.   }  
    ' h8 i" E/ p4 i* o( }+ _+ H
  541.   CloseHandle(mutex);* u* F' q1 ]9 H" m

  542. ! l! S! C1 N. C3 D# _/ ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - h5 h3 o6 Y1 Q1 E' \4 m

  544. # `8 i# {3 N3 n' u& C* u# T5 \6 z+ a6 R
  545.         AfxEnableControlContainer();
    , \. S* }6 u2 V" I. S

  546. 0 S1 M* p# G( D% }/ b
  547.   bCanUpdate=FALSE;
    ' I8 y! R  ]2 p; @, R0 Y& ~/ _$ j
  548.   dwStartUpSteps=1;  B# o  L8 d+ U9 G
  549.   dwProgramState=AP_NOTHING;
    : u8 r5 X1 u+ r( A

  550. ) W9 N, z, y' W" ^: O
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. R+ \5 h$ K+ k" m  H3 {5 g, T

  552. $ o* [6 F# t, a
  553.         // Standard initialization$ I" E* O. p8 \+ U+ t! w' i
  554.         // If you are not using these features and wish to reduce the size
    3 c0 n# Q/ ?& |$ Z0 J6 `; @* ~' [
  555.         //  of your final executable, you should remove from the following
    " r2 i" V6 e8 J% K8 s% k
  556.         //  the specific initialization routines you do not need.
    / P- k; ~4 y& S
  557. ' E" T2 J- B1 y. t9 V# F
  558. #ifdef _AFXDLL: y9 M5 ^) o- d9 k# e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # P2 N5 t5 y& X' W/ I2 q# N
  560. #else/ o5 h& ]$ q. F& t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ! [& S- ?& K2 o
  562. #endif
    " I( i* ?* H9 q

  563. / s3 @( W1 O! K
  564.   dlg=new CRevAppDlg;
    4 r9 [) O4 [* t3 c2 b& s
  565.   dlg->Create(IDD_REVAPP_DIALOG);  z* s( g3 ~; f# ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 r) [8 _/ g9 M- Y& E8 l
  567.   m_pMainWnd=dlg;$ [, A- l$ R! s" O& ?- Y3 p
  568. & b' f* B8 s& }  A/ ~8 J5 Q0 h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( R9 A, F  [$ B9 T( Y. R+ _& o" D8 w
  570. , y# w* v. k$ I' s
  571. //  GdiplusStartupInput gdiplusStartupInput;: P! l! i5 O) h" z9 X' ?6 j
  572. //  ULONG_PTR gdiplusToken;
    ; ]+ _4 M( i. D0 N$ g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- R( `8 a% H" e+ ?4 M
  574. + E: n! O8 N# Y+ v% \. V( R6 z$ E) q
  575. //        CRevAppDlg dlg;/ M9 h  R. U% S) R' L- b0 Z  X/ v0 F
  576. //        int nResponse = dlg.DoModal();3 Z! J! Q& n' S' {2 G- U' a; U
  577. //        if (nResponse == IDOK)# |/ `! n2 O8 c% L& P" }) R
  578. //        {
    1 t$ J* T. t& F/ r8 ~7 x
  579. //                // TODO: Place code here to handle when the dialog is+ G% K3 [3 m4 k, `- w
  580. //                //  dismissed with OK& K  h. q' k$ b0 E! G
  581. //        }& H7 R* B& z! M! W$ [, {) D$ Y5 w
  582. //        else if (nResponse == IDCANCEL)2 i4 K1 x# o/ I# ~: N
  583. //        {' `; P5 m/ j3 \' M! T; F
  584. //                // TODO: Place code here to handle when the dialog is4 {1 g5 E6 [* j) a2 j
  585. //                //  dismissed with Cancel& _6 z! A+ T% d1 w4 t
  586. //        }
    0 ]( d9 V$ K. ~& ]; ]% j

  587. 7 k) |5 X% ^5 x2 Y4 z+ C
  588.         // Since the dialog has been closed, return FALSE so that we exit the  G9 _! q- s- C( H7 r0 G  x: X* Q) J2 [
  589.         //  application, rather than start the application's message pump.
    9 `& i9 T* B6 N0 U* ~
  590.         return TRUE;
    1 y! D9 F0 u7 }2 H
  591. }
    9 e6 \4 M( N. w2 B" F% U  _7 ~; z5 m# c

  592. & ]1 h4 X8 }5 Q& G
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    0 N9 b7 {7 N# _- k  H+ w% H0 I! P
  594. {& f+ T9 Y+ G9 @
  595.   int i;3 U* K/ V* I/ m8 G
  596.   char *szRet;
    1 L# Z3 q3 q6 E3 W6 c" V4 V

  597. 8 ^$ W% {0 M3 \) I# B" f* |  E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , \1 v" p# m  `- o9 m9 Y6 p
  599.   if(sztoken)3 b" z1 {. T4 i: ^. U, O4 H
  600.   {# D, d2 K7 K- R5 R* m$ x
  601.     szRet=&sztoken[itoken];  n8 ~6 p) v. }2 m+ O; S$ C2 [
  602.     while(sztoken[itoken])& P" O  ^) K- E
  603.     {  T; S" v. p7 x( d  |
  604.       for(i=0;i<(int)strlen(token);i++)
    % S, b: z' _9 f. e, I
  605.       {0 I8 j; v$ }: @4 m2 n: ~4 x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( o) N2 S- q( M  j$ R
  607.         {
    , s! B6 W. P6 L4 s3 y) I- w
  608.           sztoken[itoken++]=0;
    3 X2 D3 i2 z4 y
  609.           sztoken[itoken++]=0;) b. M, F7 m4 Y1 C# H
  610.           return szRet;3 g6 g& f' R0 p) h8 d- m! t/ f
  611.         }( L7 V6 T$ @2 r. C8 ~2 i1 q3 `
  612.       }
    # R- d  Q% ^' J1 n. z( g  a8 l( i
  613.       itoken++;
    ' X; H" k) o% n9 b0 F8 T
  614.     }. F% W; v, }' T
  615.   }
    ; r2 ?$ Y4 ?5 `6 N3 `7 u9 c
  616.   return NULL;$ I# m  }1 i1 L1 d# E) p6 g* {
  617. }1 ^0 ?6 j, Q' \

  618. , e- G( \* @2 f& r3 O" {2 `
  619. void ProcessProc(long Total,long Current): @6 z& ^" b5 J% m+ H- u4 B
  620. {
    , g4 B; z; n! d: u: b+ n
  621.         MSG msg;
    " l# V9 h% m& K7 M; y+ @7 Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " R# p# x4 r4 b# z! J
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 q8 s0 q& U5 b% Y2 u7 y+ v2 i. Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * V3 e* z' o2 ^$ G+ s+ V9 n
  625.         {
    " F: g( _' Y" M( N( D) e$ W" u7 }
  626.                 if(!GetMessage(&msg,NULL,0,0))* k; B* o1 R# a7 g( Y7 v( V
  627.                 {9 _' O4 ^- D" o: ]2 {
  628.                         return;
    8 ^4 i- n$ x- C0 A+ @
  629.                 }' U# u% i0 s' @. O9 i9 B) T" e/ I, ], e
  630.                 TranslateMessage(&msg);
    7 Q; g7 X+ w4 H/ M
  631.                 DispatchMessage(&msg);
    2 Z9 q/ c( \9 F. z! x$ w+ U3 b
  632.         }        2 `3 `) Z4 a" ?9 k- J
  633. }; ~" M/ e1 o; B& T3 s, E( ^: a# I9 U
  634. 0 j/ C4 Y1 z4 \: r  P
  635. BOOL bFirstChar=TRUE;
    : F% C: ?" D: ~. g6 C4 Z- y
  636. + M+ l) K7 [+ D; Z1 S+ z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 B  d) q& v* y* T
  638. {
    0 J8 F' t, N4 a$ [: ~0 p/ ~
  639.         // TODO: Add your specialized code here and/or call the base class
    - V# f" Q/ N* ?( L* I/ d6 M
  640.   switch(dwProgramState)
    8 S/ P0 w( W: ^0 o/ @
  641.   {
      O1 i" F& e8 W; i! r- x8 M8 [" x
  642.   case AP_NOTHING:; {2 ^, k3 L& ^
  643.     switch(dwStartUpSteps)
    & D8 b2 Q3 g  R( [" k2 \' L
  644.     {1 G% u! C" L7 _5 w0 O
  645.     case 1:5 a$ B; E( u. p" k  q, b' |/ X
  646.       {
    1 s9 G# I3 c; h# c- l: _6 `0 _+ A/ ?* B
  647.         int i;+ _* ]! J* m) Z' x( ]
  648.         CDC *pCDC=dlg->GetDC();' ?0 P! h1 e8 K4 q+ }
  649.         HDC hdcwnd=pCDC->m_hDC;
    * ^, B! r0 ]7 g1 ~
  650. //        Graphics graphics(hdcwnd);1 {6 J' ~; }  i2 A& L
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");$ q: `+ B0 a9 d9 M5 h" v$ y
  652. //        INT iWidth=bitmap.GetWidth();# N( s( n& O3 x0 k! g: _: e/ t
  653. //        INT iHeight=bitmap.GetHeight();1 G' B7 b* y1 O* b* G4 n
  654. //        Color color,colorTemp;
    8 ^" M' B+ J/ L6 Y$ i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 d6 F' b9 r& K" _
  656. //        {0 O+ }) Y* z4 ]( a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / d0 |1 v! |) ?9 J% O2 r+ ?0 y
  658. //          {' i2 @; S- ~. w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 I4 G, i% k7 R9 t# D
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) w7 x4 r" T4 G5 h
  661. //              (BYTE)(255*iColumn/iWidth),
    ) m7 X% y* k% Q- z8 A) \
  662. //              color.GetRed(),% Y: E: T) \3 q' z
  663. //              color.GetGreen(),
    : V& e0 _; r8 V# d* b: O+ e+ g- h$ A
  664. //              color.GetBlue()));
    ; t; |$ M) b, w3 [1 ~# Z7 T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 ?$ Y; Q+ D3 U! \
  666. //          }8 s* G/ _! h+ ^5 i
  667. //        }
    ) b6 J* o0 b5 V) }/ `- Q5 j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 L$ _6 {) _- r% r$ {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 E3 \% V4 F4 B7 k8 T9 {4 f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & L" G. `/ o2 c0 H* g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( J3 [) `! ~: f! H% u. ~
  672.         for(i=0;i<240;i+=8)
    * D( p% _* e0 i
  673.         {6 d4 r+ v. c4 T0 u7 K; l1 Z  Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 P2 h7 H$ j6 p/ J* l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ v, c) E0 W( \; f$ |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) A$ P: d( w- J/ o
  677.           Sleep(33);1 u" Q+ \. |! R/ @
  678.         }  d" t, g! l9 K" k* S! j+ O
  679.         Sleep(1000);
    7 U3 _& H: V+ A8 q  H$ D; U* ^
  680.         for(i=240;i>0;i-=8)2 _+ m) d* \& Y; I
  681.         {3 H( i  O7 i, J" B; J: r* K: c2 R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ Y9 V3 M' q8 `+ v( `7 d, Y' [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& k7 U2 A2 C* c4 @# s$ D& D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. U) {  E! z4 o- N
  685.           Sleep(33);
    0 \2 z: S" Y; O5 N" L4 N
  686.         }
    7 A. h  Q+ k/ J) ]( b# U3 ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 {4 g$ {" L: @/ V/ v# d
  688.         dlg->ReleaseDC(pCDC);
    7 R+ U7 ^* S, E8 M- B$ ~
  689.         DeleteDC(hdctar);* M! _9 D/ q6 ]6 C7 m
  690.         DeleteDC(hdcsrc);) v9 K5 |  w$ l' {9 n' Z) G1 x
  691.         DeleteDC(hdcorg);7 z. g+ q7 |3 B4 o5 f% N1 M+ p
  692.       }
    - `8 V$ u" ~: N* U8 p' c7 L
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % _$ X; B  `0 j# j7 `
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");. h* ^2 T4 f9 u; G: z% v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ z& _8 Z9 L/ F3 q/ r2 y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 b, T; r, e2 Z4 W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& h6 _' ~5 y1 ^9 }, \8 S5 D+ r3 G
  698.       if(!Dn.Connected())/ \2 F; Y) f5 f" J3 Q
  699.       {
    ' b2 v9 @) E; b/ T
  700.         dwTotalFiles=1;
    * f: @$ r3 J9 U' B$ g3 D+ Z
  701.         dwDownLoaded=0;$ E, _2 v! I2 E
  702.         bSilentStep=TRUE;/ F! {1 C4 s3 d/ u8 p7 p$ Z
  703.         bCompressed=FALSE;
    : f" S0 l% u' ?1 `# a4 y! N, N5 A5 ]
  704.         strExtLocal.Empty();
    9 O3 S* n) F$ E) L& g2 R" E9 J
  705.         strFullName="readme.txt";
    9 h1 a9 X+ I) h! t
  706.         dwProgramState=AP_CONNECT;# n1 C* d, l; G
  707.       }
    ) J) f7 l( Y. Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      ]8 ]7 m. V, T5 ~0 f) h, \9 c
  709.       dwStartUpSteps=2;2 Q3 R9 L. a! }7 ^
  710.       break;" ]) S3 t" h! s6 |. _. U8 L
  711.     case 2:
    0 K+ o2 c- M8 Z- M. @
  712.       {
    4 u+ i: `8 C+ a% H' t! ^- ]
  713.         int iEOF;; s; d( V! h/ Q: A! v
  714.         FILE *fp;& T) m: y( C; {- ^/ d) O* x! c3 P
  715.         char szString[512];
    2 n- o- I9 S# a2 X0 t& ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / a9 p* b( f9 {1 U: I4 _( p
  717.         if(fp)
    : C& S$ u3 h6 W+ a! B
  718.         {: B1 F  s3 ~- w6 v# j& l$ @
  719.           do
    8 o9 |4 l  h- Q0 @4 u
  720.           {
    7 d0 p! n' m+ O0 _0 T
  721.             iEOF=fscanf(fp,"%s",szString);
    ( _- N: n7 A9 D' z: A- D$ O
  722.             if(strlen(szString))
    & N/ V4 h! a( W4 A6 T1 |7 r
  723.             {
    $ e. t* L) \2 I' Q9 b
  724.               if(bFirstChar)0 f# z  |3 m& J% Q9 F7 r6 ^) b. U
  725.               {1 v/ q* N& ?0 w$ e" Q5 e* L; W
  726.                 bFirstChar=FALSE;
    % ]: ~1 e! S: M% ]
  727.                 bConnectIsBig5=FALSE;- S( W. a1 a; B, b" U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    / k$ k3 ^" ^0 x, B
  729.               }
    1 J# N- {, F) _& ~/ v# K; D. t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  M+ O; w3 \0 Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 l% H0 v. l! h1 k3 U) a+ B
  732.               dlg->m_ListText.AddString(szString);
    $ [" E! G' N: ^# p, f: y7 D5 O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& e7 @( p7 N2 O& k) o
  734.               *szString=0;
    / T% h$ j+ E" M% q6 E$ ?3 W
  735.             }" S' p4 f8 Q/ }; N  G- j
  736.           } while(iEOF!=EOF);& T& u: j0 r- A/ ~3 _" w
  737.           fclose(fp);
    / k, l" g4 C8 [6 @- x5 g" s
  738.           unlink(".\\DownLoad\\readme.txt");
    2 |4 V5 f, T( X. O
  739.           dwStartUpSteps=3;
    1 m8 i7 W7 E' n* W# w: f  T! O/ T
  740.         }
    9 d4 M" _3 h6 q0 S  D  }% X
  741.       }
    % G  n1 M& B- I8 H: I# w! d' G3 O
  742.       break;9 L/ N( \( ?# U* w5 K  W$ L; K
  743.     case 3:0 B& e6 h) R) v& i
  744.       if(!Dn.Connected())3 X- W% Q; r- P, N4 F) p6 l+ l1 N
  745.       {
    % Q" i+ P. h+ U7 T8 V( N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ; a7 ]7 W9 g  `' C& e% k3 L: k6 S
  747.         dwTotalFiles=1;% M  D- L8 z* M5 i! V( t
  748.         dwDownLoaded=0;1 U7 r6 G: u& L6 k9 t% e6 R
  749.         bSilentStep=TRUE;, e3 Q9 V. e) n
  750.         bCompressed=FALSE;
    ) `& ~0 m; X& S
  751.         strExtLocal.Empty();) }- p% a0 u9 h8 U8 M& h: l: v) U
  752.         strFullName="checkversion.txt";
    * [0 a. Y/ S) s9 Q8 H
  753.         dwProgramState=AP_CONNECT;+ L- c2 T5 i: J1 ?! U/ I
  754.       }: u# c0 d/ c( y4 M% F. |, A  M0 _1 _
  755.       dwStartUpSteps=4;& y6 Y: R; z" n0 ~& H! q
  756.       break;5 t+ _. `- l# |& p" I3 `. m
  757.     case 4:/ }0 V- [1 k2 g1 y$ o7 G: w
  758.       {
    % M0 Y9 Y8 ^4 R( ^9 `
  759.         FILE *fp;9 l1 E# u2 e  Y$ H
  760.         char szString1[128];) k8 [, C# d$ y1 D2 b$ O& B
  761.         char szString2[128];
    $ @2 S8 V( l% Z  l3 R, D
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ d1 ^6 V. r0 Y
  763.         if(fp)
    , k9 Y" G8 B" [* w* @8 [' N4 e
  764.         {
    4 G; h0 m0 Q* V5 a& `4 V9 _
  765.           fscanf(fp,"%s",szString1);
    2 A6 B/ k, I. y1 V8 X
  766.           fclose(fp);5 E. d. m- t  w
  767.           fCheckVersion=atof(szString1);
    1 X* A' S% |) _8 n( w4 d% G7 F; E
  768.           fp=fopen(".\\checkversion.dat","r");4 r8 t3 m* S! i
  769.           if(fp)
    ) r) z* R* Y% a( X4 }) }
  770.           {% c! t% D; F5 t* D% p( |9 l
  771.             fscanf(fp,"%s",szString2);
    % S$ q: k# B$ U, U8 q8 L9 r* K* P
  772.             fclose(fp);, k; x% m7 X6 L: V9 j9 I
  773.             if(atof(szString1)!=atof(szString2))/ J6 t, |% f/ Y+ F" k  D
  774.             {! u3 y* n. l. d1 `' b
  775.               if(!Dn.Connected())
    , ]' Y. Y6 `' J$ v5 Q+ h
  776.               {
    : @5 c7 Q; K, q1 w
  777.                 bFirstUpdate=TRUE;$ a# w" I& D3 q! [1 J8 ]
  778.                 dwTotalFiles=1;
    ) m. H- v0 f: k2 h1 Z
  779.                 dwDownLoaded=0;9 U/ I1 R; t! I; S/ a7 j
  780.                 bSilentStep=FALSE;3 Q' A0 T7 b. |4 g$ i2 o1 m( S6 i
  781.                 bCompressed=TRUE;
    3 ^  r; E& d3 j: S5 M9 k  _9 H
  782.                 strExtLocal=".\\DownLoad\";
    0 J. m/ l% R% h( G4 h8 a1 Q5 a
  783.                 strFullName="update.txt";
    ! u% N7 {4 Q8 L1 M- H& Y; i
  784.                 dwProgramState=AP_CONNECT;5 X0 r! C7 {, }( o. J6 }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, i/ @! l% S& Y/ \0 Y" V: V; a2 P& Q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! O1 F# _9 A+ l
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * [: I6 v- y1 r9 ^
  788. # V" a9 q' j% P7 \- \, {% o
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 z! M, a1 O- ?7 H1 b7 D& _
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ b6 ~' X7 v+ H) N5 X7 t0 Q1 D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    & V3 [; E, ~5 y; Z! P! M& _$ b
  792.                 {
    5 k. l7 A5 P# _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");" e) j# z) @7 [& N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");; p$ V. }- k+ d! i# i3 z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");, B7 U. ^2 p+ x: Z/ v. g3 l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 \: F8 U$ ]0 i, ~$ y1 k5 _2 z

  797. 2 g5 T; P6 n: [3 n8 o( R; l1 `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 s; X( u) i( n; k7 i' G
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% s8 x3 D; x5 ^4 L6 }6 K3 U  u! b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 f' e; V4 x) H- _0 i' q* l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 J- D* M3 ~, `7 O2 k$ t. D( ~' [
  802.                 }
    ' f1 ?- N, K" Z7 E. y
  803.                 dwStartUpSteps=5;
    7 O9 l: z7 v, Y- K8 q
  804.               }
    " b% q: Q6 d! p/ M$ Z9 _; O
  805.             }0 P8 x( k3 T( T- p
  806.             else
    ' S- I# i- F9 G$ l, q
  807.             {- R/ Z. e% D$ E9 f* X* L5 r' J, r7 ]
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; I2 Y7 K1 c$ ^: a/ [! s" v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . F# m& s  @+ d) h! x
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % N% o3 e, f* N) Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ M9 \8 I) W7 P7 W- s
  812. $ _- r) c% P0 T, i3 D4 A
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m* O7 S0 B+ Y, @6 ^* A  n
  814.               dwStartUpSteps=99;
    ; m0 u' o! ~2 c5 s
  815.               bFinishUpdated=TRUE;
    * E' H1 R, I. G% q) H
  816.               bCanUpdate=TRUE;
    / t3 t+ w- J; C! z
  817.             }
    0 B; `% ], F# B0 E( Y# w
  818.           }
    ( p( A7 k$ n/ R/ d  ^
  819.           else( q( F# N& f+ j! l
  820.           {
    + V# X# y; c( d
  821.             if(!Dn.Connected()). e3 n6 E/ m: m( Y" F
  822.             {! n- y3 s0 s) H, K, U3 D
  823.               bFirstUpdate=TRUE;: Z0 U* B" _% w( q% l, ]
  824.               dwTotalFiles=1;+ J5 |5 U' r2 B* v6 R" H
  825.               dwDownLoaded=0;
    % O! a4 |* [& ~9 E+ c! a) O
  826.               bSilentStep=FALSE;! V' t- i9 V0 z# y5 t6 e6 Z
  827.               bCompressed=TRUE;7 E1 [& |0 s! W8 k
  828.               strExtLocal=".\\DownLoad\";% p8 T% M. q, d) {7 G
  829.               strFullName="update.txt";
    - e5 n' J$ s+ V1 i
  830.               dwProgramState=AP_CONNECT;. g$ _" @. C1 F0 i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ ~# ]; F" B6 w2 H5 H
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( _5 O$ U2 I' E# t; S% ^, c
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) v, \9 W8 w5 E3 l6 ^2 q, }. N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 `, H7 x+ y9 W' X  @
  835.               unlink(".\\DownLoad\\checkversion.txt");' y/ E/ l; Y: Z4 V+ F9 r. ^5 |
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# g& ~2 s4 C; b4 U
  837.               {' m$ P# d- l1 |& R3 r" o1 S, a5 R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - }$ n# o4 g- r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- g& @; h, k! m# U% x  V% C
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& C3 F! R# {) N. l8 D. o& P. \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- C/ F: M( B3 b) n% A. z
  842.                 . P4 i% N0 f. Z' p6 S9 w3 Y5 \- P' L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 J( b: K6 N8 K/ {2 a$ a1 d
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % {7 T9 q( M$ Q) y5 }- z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) ?+ k* G% p. ^  \" J) g2 G2 W
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 A3 g) Z( z) U  P5 b
  847.               }
    - K9 I/ z' c. ]. y" c! [8 R2 v
  848.               dwStartUpSteps=5;
    ' I/ @6 x3 G# `3 d" Z
  849.             }
    7 o) `/ S7 m* _/ l
  850.           }8 J7 _2 r! N  c
  851.         }
    5 k' J7 g) |* Z. Z
  852.         else+ [" b8 y: V- y1 D, |
  853.         {
    0 y6 @: Z) Z* c
  854.           dwStartUpSteps=3;& a: w- s& C7 |! e. D
  855.         }
    8 Q. @1 L" g+ u: u% T
  856.       }3 e: w) t, \2 `
  857.       break;- P" W7 Q, v2 x5 C- U  ~
  858.     case 5:5 S/ A& X: O# h
  859.       {
    8 ?: p( I/ e2 f! I) Y' Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) D/ ]9 W5 N. Y! ]- m
  861.         {
    7 U# ^0 K; U8 N% p8 `7 x6 P$ y1 R+ u
  862.           int opt_overwrite=1;+ N. V3 Z7 Z- b
  863.           int opt_do_extract_withoutpath=0;, y7 |, y( @3 S0 F
  864.           unzFile uf=NULL;+ l: ?# G; j: G5 N# `1 ]& o, a) B: t! Q

  865. + x/ c2 }" Y; W0 j' u" E
  866.           uf=unzOpen("Wsa.zip");+ C& X+ N% ^* I: h
  867.           if(uf)
    2 ?7 ^6 p5 w- x, a+ B
  868.           {9 U9 {% r  x9 z/ q! Q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  n  H% u6 u; g4 C0 ~: Q
  870.             unzClose(uf);$ Q" g1 o* i) w* A5 E* h$ }
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 j, h6 _, M( [. D* b
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    : ], W* P1 _. _2 D7 b. p$ b0 Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: D2 j; p( w$ O) E# m; _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 A4 Y) J0 f6 \2 I4 A
  875.           }: p' }2 V! @- M- s( j
  876.           DeleteFile("Wsa.zip" );
    5 v- m, R! U1 D9 r7 h
  877.         }
    : s8 B6 F# `5 Z) b& Z
  878. ! j! d6 K% {6 P4 w$ M4 @5 x
  879.         if(CheckLocalVersion())
    ' }- w& _  e% B1 _
  880.         {5 B  J. T4 ~: c7 e1 V
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 h+ |9 @- j6 b: l3 w. J
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ; J" Z8 P9 I! n' [  x! z& ?9 F  w
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");# h5 d* c( t  B0 h3 ?9 {
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 a; W, N3 j/ _- q. S. u. L: x
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) \5 A1 V; n2 I# X; W0 ?- i- S
  886.           dwStartUpSteps=99;" G5 x( K) }: ?( _& \5 g7 [, ?2 Z4 d
  887.         }
    - m6 ^: Y6 C" c3 S" Z) V
  888.         else
    7 s, i, b6 ~) E
  889.         {4 \7 M; X2 j8 f. O6 a: ^4 Q# ?! G/ ]
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- q2 D1 B0 p2 Z5 S) u
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% b" Q1 X" O1 |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 `1 j: ~' w) X* k+ _) P0 z

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

6 q* H: U5 y6 ]8 v6 G

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-7 10:01

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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