CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% {. Y8 S; \: @; N2 N! ~( k# c
  1. / RevApp.cpp : Defines the class behaviors for the application.* w2 ]2 m' K; h4 H
  2. //( W2 m" I/ ~% p, Y) N/ o# ~
  3. 2 q1 W  F, S5 w) s* ?8 c7 g
  4. #include "stdafx.h"
    " d& \: L. u( S; z- b

  5. 1 G4 B9 i6 b5 ^( j+ t
  6. //#define UNICODE
    4 N6 _' P1 e7 d( ]1 k$ u( O
  7. //#include <gdiplus.h>
    1 U& `* e8 X- u9 b; F) m( q
  8. //using namespace Gdiplus;( S% i7 H) m! Q+ Z! c

  9. 5 X' \; d" t* a# j, T
  10. #include "RevApp.h"6 K  E# o$ U: \
  11. #include "RevAppDlg.h"5 }- @# U6 Z+ s6 ^+ u( Y
  12.   k: ^' G# l  v# h( J
  13. #pragma warning(disable:4786)- Y4 s8 N0 H3 I) l6 A0 Q7 _- I
  14. #include <map>
    ) p' [: {9 P7 b9 L, |( l( u8 S
  15. #include <list>  p9 Q, S* j; b3 j- h, h% a
  16. #include <direct.h>
    " U( X0 U2 H$ j8 N/ N

  17. ) }8 |' m( O& B9 w$ ^( u0 G
  18. #ifdef _DEBUG& P4 n: k6 {& w6 o5 ]/ j" ?
  19. #define new DEBUG_NEW1 n6 a" F( R! q  }. l7 I- O
  20. #undef THIS_FILE
    / A% G" _( h( e( w
  21. static char THIS_FILE[] = __FILE__;$ ^. ?# U; A* I6 y; ?1 h
  22. #endif1 U- o0 v" g/ f- }
  23. #include "SkinResDef.h"
    / J2 g# I, ^1 y, H/ E* ]* X. s
  24. #include "ChangeBG.h"8 q! V1 M, @" a4 h6 u  N
  25. #include "AFXINET.H", E. t* u& R7 f6 u% L, |
  26. * M& T5 a1 L; q0 G" p
  27. #define TRADITIONAL_CHINESE 08 U7 Z" m6 j2 y, @$ w
  28. #define SIMPLIFY_CHINESE 1
    / v6 Y: m& u9 C: W' \: z
  29. #define ENGLISH 2
    0 q4 S$ R+ X; B
  30. int m_iLanguage = ENGLISH;% [8 h- |5 i% c( v0 q) F
  31. /////////////////////////////////////////////////////////////////////////////
    ( [- S7 z8 X  s5 u/ t7 w3 }
  32. // CRevAppApp% \. h  p8 s: s6 u  ]- Q

  33. $ R9 `; [( v& B) D4 t* L% b  y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 ]6 ?9 l8 p  y- e
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) M5 ^/ T) f* t0 y4 R( P9 N. b3 }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& j+ J. e; U6 V) }( {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 z3 s3 e7 E, K
  38.         //}}AFX_MSG
    - d) k7 W) R* H9 w" l8 U" |9 U2 y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# p& w8 `2 H9 X5 e# p; _) Y8 o
  40. END_MESSAGE_MAP()6 D! Q6 ]$ u" S- [3 _: q+ ~2 b
  41. : L# \( P) }& b- q
  42. /////////////////////////////////////////////////////////////////////////////
    & d; g, _2 V( x* V$ \4 p% E
  43. // CRevAppApp construction
    4 Y& F/ M8 o2 l& C$ Z) F2 n

  44. 1 _1 y$ }. u7 z3 r" r. `& [
  45. CRevAppApp::CRevAppApp(), j; }$ N! K" w. A, W7 y; G9 D& T
  46. {
    ( T- k4 U' d# D. t
  47.         // TODO: add construction code here,* B, I3 U* F" `3 O- E. e) \' X0 R
  48.         // Place all significant initialization in InitInstance
    8 D" d+ q9 H0 b- z* j: y
  49.   bDisplayIsBig5=FALSE;% P! [7 t! E" n
  50.   bRestartUpdater=FALSE;
    ! K8 v* Y0 _  E' U( P( N1 R7 i! s- ]
  51.   bFinishUpdated=FALSE;
    & r4 [0 |( Y& [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! e( q" n# z8 a7 M( @' g. _) E! r' [  m! q- [
  53.   InitChangeDataBig52GBKS();
    % ~8 i% H) ]3 `3 O, v. P9 f
  54.   InitChangeDataGBKS2Big5();
    7 r% M0 {# N6 D* f
  55.         //0 ~" U+ p  X% ^7 ]$ }
  56.         bClickRunExe = FALSE;, y3 W- r5 P+ c1 T: S
  57.         //
    & J: b1 z  C) i
  58. }
      |( ]0 ?9 V, |$ M% N. R) [9 ?

  59. ; l5 w# K2 ?* C8 m6 h+ m. Q" [
  60. CRevAppApp::~CRevAppApp()
    4 d2 ~( R2 U. l. S- _" Q
  61. {
    , W( Q$ J$ f: g
  62.         // TODO: add construction code here,
    # \; A( C2 o4 p+ \5 `3 m
  63.         // Place all significant initialization in InitInstance
    2 P# O: f2 i# z! B
  64.   EndChangeData();4 o( M6 {1 g( |1 @: |! Y3 K4 u
  65. }, \& A# \6 t. E  U
  66. - r- q2 Y/ o$ N( W3 I/ O
  67. /////////////////////////////////////////////////////////////////////////////
    6 K( V" P2 \3 r% y6 t5 |, U! e
  68. // The one and only CRevAppApp object
    7 p* K. a) V1 L  m9 M9 A- E2 G; L/ v
  69. 6 b1 P1 H5 I* |' m& I6 d7 s
  70. CRevAppApp theApp;, S/ F( i: ?3 F+ t6 D9 H4 J; J

  71. * S9 b+ C4 S0 T( \1 |. r  N( w$ H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( ]) M7 L; s2 t, p+ B
  73. {- r. ^; ]6 C$ Z' g
  74.   int iEOF=0;2 ^3 X  E% ?& o' r
  75.   char szTempName[MAX_PATH];) [* q, E5 o6 @, ^# N' h
  76.   *szFileName=0;& H. O' ?* Y1 c1 s) Y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( }: D. E' h' A9 h$ R5 Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 W/ G. |2 a7 w* q7 _2 p5 J
  79.   {
    & p9 Y; n7 n* T
  80.     strcpy(szFileName,&szTempName[1]);
    ! Q; Y% Q9 D% C  ]  v# S
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 I% b) o: v! w! Z4 Z' g
  82.     {
    5 I% Q4 F0 u9 N8 M7 Q& W
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " Q2 a4 |+ E, A! b# |
  84.       strcat(szFileName," ");
    - s2 ~' O% }- r/ P* M4 @& Y
  85.       strcat(szFileName,szTempName);
    & r' o* q7 s9 K: \0 n
  86.     }
    ' O2 }: c4 O, x9 _! m7 u) X+ S- I
  87.     if(strlen(szFileName)>=1)
    * ^, k0 s- R9 K" Y
  88.     {( Y3 i% H0 D% S9 i
  89.       szFileName[strlen(szFileName)-1]=0;# g7 C7 _0 x( ?
  90.     }0 B1 v$ u" l1 R2 C# X' _
  91.   }
    7 K- y, a* g' S+ J
  92.   return szFileName;( S" p( r1 {8 ?5 g0 B, e7 X! V
  93. }7 X& \; s6 \% S
  94. 1 |7 e' A- `$ H* N# x: k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ; M0 g, f( P% p  I6 N0 W: {
  96. {
    ) c6 h# O2 u  n4 D
  97.   FILE *fp;
    ' e8 q  U2 c# \0 c- Q6 Y+ h
  98.   char *key=NULL;* }" @7 p# X$ Q0 V: b
  99.   char version[MAX_PATH];
    8 Q+ _; i) B& J/ H) G
  100.   LPUPDATEFILE file,olds;
    ) A" X1 |. \, A5 K6 A2 O. E4 w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 a8 r: G; F' N
  102. $ a$ I8 E1 a, [: }7 l; P
  103.   UpdateList.clear();6 i: `9 {6 e( R( U: k' S
  104.   UpdateFile.clear();# d0 |+ g8 z, S' k2 K$ J
  105.   if(GetFileAttributes(filename)==-1) return false;5 B3 k9 |4 h, K) e. E# ~* o
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) x% {: Q; a7 k" Q, K( `  O4 k
  107.   fscanf(fp,"%s",version);+ R) z& k' \2 C
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 d  U3 C+ |; }0 l
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 p. W9 P% ^  b7 x
  110.   {7 i. Y; i8 v, C1 m' G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 X" \& h; L. o
  112.     fscanf(fp,"%s",file->path);$ b3 o: K# S" R( H; f$ B
  113.     ReadFileNames(fp,file->file);/ a4 Q  R* O5 z; f# U
  114.     strcpy(file->full,".");
    1 A5 a) V/ ]& v, a$ d$ J: e
  115.     strcat(file->full,file->path);
    1 i- G- _6 J2 k( ]) A
  116.     strcat(file->full,file->file);
    " ?" W3 ?  q1 R( m# s/ a/ o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 ^; k, ^; O. B% X
  118.     {
    6 Q" g6 g+ g) _3 [  V: t' @+ T
  119.       file->vers=(float)atof(version);( ^  W5 j0 @! `. d3 z0 \& W
  120.       UpdateList.push_back(file->full);
    / A% }+ _2 _8 U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! |, L6 a" D3 N! O8 C: K
  122.     }8 M% `  u1 Y5 v* X4 {
  123.     else$ {3 t4 p( D* k& S9 d$ p
  124.     {; j- [0 b) v& P8 ~! g" i' b: K
  125.       olds=(*p).second;9 h. R0 ]3 A; _
  126.       if(olds->vers<(float)atof(version))# U- h* f8 b) F. @4 P2 D1 U
  127.       {
    ; Q* `7 w+ |: P0 d) W  x0 F
  128.         olds->vers=(float)atof(version);
    ! [9 U9 W- |5 R6 Y6 ]
  129.       }
    ) w$ v" z" S1 K: l
  130.       free(file);# o, I0 p) g0 k9 |3 B! p. L5 z  Q
  131.     }
    + H1 M$ t* ~; G) `+ v: M9 R
  132.   }' [* m; I* g8 Z
  133.   fclose(fp);: m4 J" C  N" ~$ p6 T0 M8 a2 ~
  134.   return true;
    ; z" s) r" b1 j' \+ W! X, w% ?
  135. }
    , {, |, f; k8 R& V
  136. 6 |1 Z5 q+ n7 c
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & I) }6 l9 \% e7 n4 n; n# X5 e% @3 H
  138. {1 @7 g* b$ x% o7 U
  139.   TCHAR  szFull[MAX_PATH];
    ) A/ m+ _) ^$ L  c
  140.   TCHAR *token,*inter;! |, ?* L; ]6 [3 n5 B$ Q
  141.   *szPath=0;
    % D4 s# K: T7 ^
  142.   strcpy(szFull,szFullPath);
    ! f; k; M$ D' c! v; u) |4 K5 j
  143.   token=strtok(szFull,"\\/");( {+ \$ Q$ @3 t. m" L: j8 c- P
  144.   inter=token;
    7 B3 g: E4 ?9 R- G( ~! R: }6 P
  145.   while(token=strtok(NULL,"\\/"))
    ; T8 w" v( k# z6 M! A) j: F! M
  146.   {: v6 D9 c/ c8 e. _- W. L
  147.     strcat(szPath,inter);7 S& t% x* B- O1 E
  148.     strcat(szPath,"\");( M  C- B, V% [/ W0 o7 M9 K- N
  149.     inter=token;7 Z" O) F2 I9 f; G1 h" q
  150.   }6 f# ]3 m! a# z9 \
  151.   return strlen(szPath);( t& _8 _0 B- D8 ?; z
  152. }% ~( Q" t  `6 C' L0 @# |0 Y
  153. + c! f7 L7 |8 Y7 I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + x* B: K% l1 e2 {+ t
  155. {
    7 z5 H& J% n- W4 @  c3 |4 `3 G4 u- D9 j
  156.   DWORD attrib=GetFileAttributes(Target);4 k( F6 \/ R% ?/ |8 X" H
  157.   if(attrib!=-1)6 a8 Q$ \" U" ~0 Q: `5 a- G
  158.   {
    7 }) `# q) `+ q$ n, b+ _7 S0 ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + g+ k' k6 m" \: @
  160.     {
    ! d* g* [9 A+ G; p# |
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ F2 \! P4 C, w) t. b8 t
  162.       SetFileAttributes(Target,attrib);0 j3 d, w6 f2 u! b+ m+ J- e
  163.     }
    6 a+ L5 B, Q: A! T8 K# Z
  164.   }; Z! }8 r2 e) z# V' w$ Y7 Z
  165.   CopyFile(Source,Target,Erase);- W# V1 N) `) w; D
  166. }  U! t0 _+ n( }5 F# O/ O; p3 i+ Y

  167. & g' T# b, ]% q9 K
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# R% G  ^( Y; o( g7 w. j
  169. {! G& a) o1 B8 n) N
  170.      FILE *fp;
    7 w3 \0 w9 [. I# `
  171.      char  szBuffer[8192];
    6 G. K$ R7 _. O$ g9 F; S% L
  172.   va_list  argptr;! i( d' d9 O% `/ ?6 O4 S

  173. * Z2 }* Z6 ~6 _, B7 R
  174.         va_start(argptr,message);
    8 q; v! B& E( j: y
  175.         vsprintf(szBuffer,message,argptr);
    , D8 P/ c( t" G& Q7 M
  176.         va_end(argptr);% l7 e1 k- D! x
  177.   fp=fopen(FileName,"a");' a* j+ x! V, o, d8 b
  178.   if(fp)
    1 e9 s% D& X: J. y3 l
  179.   {. E8 Q( l2 f1 @2 s9 U
  180.     fprintf(fp,szBuffer);
    & X9 E& L+ s. W) f% T$ r8 W" a
  181.     fclose(fp);' K' Q, K% f* R3 Z' V% n
  182.           _flushall();
    4 P3 M; _3 E5 H) A* Z
  183.   }9 K; ~4 k' Q6 z' w! R
  184. }- c$ v7 E7 r7 G% s( y* k4 D7 x8 r
  185. * s2 x4 B3 v( N$ Q9 b7 I& I
  186. BOOL CRevAppApp::Fclearf(char *FileName)! `4 U9 n; T2 U
  187. {7 u/ u: W( u  G
  188.      FILE *fp;. W% z2 E1 n2 r, p/ W( [
  189.     DWORD  attrib;0 a8 ]- ^0 s& T+ n: f
  190.   attrib=GetFileAttributes(FileName);- H+ l, ?$ S* X. S
  191.   if(attrib!=-1)
    & v$ Y0 F! @& I: G
  192.   {
    " C( Q+ M3 l9 c0 f; o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 g1 H4 L2 a3 n6 `; w
  194.     if(!SetFileAttributes(FileName,attrib))- D% l4 |* w+ _# _
  195.     {
    % d- u$ H: f( V1 Y; g6 j  N
  196.       return FALSE;
    7 g; S( r6 I+ c: X5 y
  197.     }! m+ N3 ^: b9 E$ \. F) |
  198.   }  d  C* |$ C; `; P+ z5 U
  199.   fp=fopen(FileName,"wb");) W! }7 x! B! K- _, |0 b
  200.   if(fp)
    + H5 P/ @* N0 _8 D
  201.   {
    1 m- K8 Z) m$ f2 Z2 k8 K+ _
  202.     fclose(fp);( ^  ?/ l9 {& u' m1 b$ |# a
  203.   }5 y4 I# x4 f" X; F& @
  204.   return TRUE;
    0 @* l. x6 c6 o4 b' t* y1 O. m: I
  205. }
    ' M/ R( J& l  ~" p" Y9 y& r

  206. ) b3 l  H* o/ F0 B1 d! k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)) `# l) ~5 n% Y
  208. {+ d# F! v6 f6 J$ c" t/ `0 j! x
  209.   char filename[MAX_PATH];
    ( W9 n5 r3 y8 b. P  ~
  210.   LPUPDATEFILE file,olds;
    : ~$ W# ^7 b4 @. }  ?
  211.   std::map<int,CString>::iterator i;, N( F# U7 V5 c4 B. x; H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;. j! ~( u; P* Y
  213.   std::list<CString>::iterator l;& q6 |" X( `, m  `' \6 A4 M
  214. 3 T/ j" u0 {, Y' \# p3 k
  215.   if(bFirstUpdate)
    # J- a2 R! ^. q$ E- U% }
  216.   {
    ' \+ a" D& B5 [, N: {
  217.     dwCurrFile=0;& n0 h% P9 S( y2 B! A1 F+ H
  218.     bFirstUpdate=FALSE;/ L  a: }' X6 J6 O4 l
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' k. J, X+ e, P9 A
  220.     {
    # s! I+ q1 E. z
  221.       dwTotalFiles=UpdateLocal.size();3 U+ A) w# h& {) A5 P) h- C) F
  222.       dwDownLoaded=0;
    8 n# N4 U6 @; U& K! P& P
  223.       bSilentStep=FALSE;
    7 u7 }6 S  e9 W; A
  224.       bCompressed=TRUE;# {. g# x; {) N, }' m6 I
  225.       strExtLocal.Empty();
    # G. P: |2 I/ B- P* i( a4 Q
  226.       strFullName=(*i).second;! x. c: n5 {. M, \/ ?0 n. R, F/ g6 w
  227.       dwProgramState=AP_CONNECT;! y0 k* o  T( L( I8 Z$ q
  228.       return TRUE;  F& N% E* B0 v- K! O' [# E
  229.     }6 c" G5 I- V* K2 d
  230.   }
    / w3 Q8 P7 }4 b* [( A2 P$ m
  231.   else if(bRestartUpdater==FALSE)
    8 Q& ?. e4 B5 P" P, p- f
  232.   {* F- m2 m0 `8 d5 r- U; F# s/ s1 H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 m& v: z! ]+ Q! G" h3 ~" ^
  234.     {
    2 I6 x! w$ j( R# u% T- n& M  k
  235.       file=(*p).second;
    3 o; L" J( f) D: i, E) X
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    2 Z8 N3 {2 N0 r3 A
  237.       {
    7 D0 f+ `+ f5 a1 G) K$ Q, L, u2 T# _
  238.         olds=(*p).second;
    ( M4 S7 Z% d( M( t
  239.         olds->vers=file->vers;& I1 E/ a. D, G# {( ^7 U6 q) O
  240.       }
    - u- \! V  {8 C1 u! I
  241.       else
    ! H+ E8 ~, W8 _. {' q! V
  242.       {
    7 L. }' x$ b; B6 K# X2 m: I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % I" T7 A) k7 f/ A1 f6 o5 V- {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 `# C5 C/ F. ~" N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) ?2 S& i( H4 C3 Y1 h3 q+ P9 M$ ?
  246.       }
    7 `( T" p4 n& N
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# M$ U1 F  C7 e2 S* F( |
  248.       sprintf(filename,"(%s)",file->file);# j  T1 {" t: `+ I5 d- x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + W1 o! b' P! U9 G/ o* J; k0 b) |4 B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      o8 h$ V0 M( |3 E* y( j
  251.     }
    # q. |" ]6 C( w
  252.     dwCurrFile++;$ ^2 m2 U- `. w% o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * l4 t# c% y( }* c
  254.     {& s0 v/ D% W' G8 `& R0 w% \
  255.       bSilentStep=FALSE;9 `; t- e" |% G2 g- T
  256.       bCompressed=TRUE;
    3 N: \1 s4 e$ g/ U" x6 R  w1 h
  257.       strExtLocal.Empty();
    ' z. h( S* e, z% w3 I! R7 O
  258.       strFullName=(*i).second;
    ( x) `/ v. b, Y
  259.       dwProgramState=AP_CONNECT;1 Q8 T& N3 {8 h" r
  260.       return TRUE;
    ' i$ d4 r5 ]$ X9 x4 p" o$ J. C+ z
  261.     }, a0 m6 e8 W' H! }8 t+ J3 m* v
  262.     if(!bRestartUpdater)
    2 I7 i# I4 g5 O8 S6 D8 j- h
  263.     {" V/ P, \% d* Z# S
  264.       int iCurrSize,iFileSize;7 C* Q# m; b& N2 Z) z( ~2 L/ `
  265.       iCurrSize=0;
    4 `4 k7 n* p, B+ f4 y; e( P! v
  266.       iFileSize=UpdateList2.size();
    " ^2 [  l3 e9 W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ \4 D/ W0 R2 Z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , o% z7 {0 f2 O& S8 f! K5 Z4 m
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - n7 A' E0 c' {5 x! G9 {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ U$ P2 p& S3 C( \# L
  271.       Fclearf(".\\update.dat");0 j- S9 K2 t3 h; U3 q) _8 F; F. d, ~1 v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 u( H: w; ?4 ]1 Z! ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( h- i/ @5 r* G4 V1 p) @& t
  274.       {# R5 d; s& Q3 x0 g1 k4 J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 Y. J' ]' Z: [3 B% D( K
  276.         {: X6 a* v9 b3 J. d
  277.           file=(*p).second;
    ( |  ?$ N# a2 O8 }+ t0 w+ ~( m
  278.           sprintf(filename,"(%s)",file->file);
    ! x) l- _9 p1 |8 g* Z- O
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 u2 f1 r2 u: n' f) Q0 }# I7 P3 ^
  280.           iCurrSize++;
    2 C1 \* O8 `' Z8 b
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      L+ @4 x6 ?4 b9 @
  282.         }
      s/ G! D( A$ a; J4 \
  283.       }
    ' p$ P2 n( L; |- s. n
  284.       unlink(".\\update.txt");
    3 V8 o; V8 B# H- y- i5 ?! I
  285.       unlink(".\\update.tmp");; C6 j' i' a7 M% ~- V; o6 R, U3 Z' T
  286.       Fclearf(".\\checkversion.dat");
    " e/ u2 m) U! @! @; B' Q# a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : p+ L& [2 S) m
  288.       if(UpdateLocal.size())" N: w, S& T$ ?: ^
  289.       {. f: H$ s: m  M% A9 f* M
  290.         UpdateLocal.clear();2 q+ h' V1 C! h: y" y, ^
  291.       }" P% @( r8 B& u  D
  292.       if(UpdateFile3.size())
    - `* O, \! Y5 }# a1 ^2 b1 z2 c
  293.       {
    0 V# u) h  k1 j# j' M# N3 l+ ^, |! d
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + W# c& ]( |7 I6 E
  295.         {  G* Q; p' v& [( V' `
  296.           file=(*p).second;- `1 @" R' v: F8 L% v
  297.           free(file);
    3 d% F+ P1 X* K2 Q& {$ D, H5 D
  298.         }/ s4 c! ?: N4 r( s/ v- t6 y% j
  299.         UpdateFile3.clear();, q1 r) H6 J& |8 @- G& m
  300.         UpdateList3.clear();+ Y3 Y$ M$ H* g  r! C' }
  301.       }
    ( J, F  F; C/ ^/ u6 B
  302.       if(UpdateFile2.size())( r  i* R( s) v- h
  303.       {; j  P% }8 U* N) D) t/ Z! l! S5 e% q6 C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , K! d5 }3 ?: s% n- U
  305.         {  K+ m$ r) _' p% U; `( F
  306.           file=(*p).second;
    # O& [- y& F; n/ ^, Y4 M
  307.           free(file);
    7 E" w/ V/ c5 }# {( e! I
  308.         }& e: Z3 M& P/ U) ^- V+ a$ |
  309.         UpdateFile2.clear();
    9 T! S; y% |. H6 e# x6 B0 R
  310.         UpdateList2.clear();. j  Q! }. C; g
  311.       }. D8 m5 k0 T$ ^: C: @* w5 w
  312.       if(UpdateFile1.size())
    * O$ T" w7 E1 ~6 h8 i
  313.       {
    1 Z  m# W/ j9 u) i+ |1 b7 h
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; h& y+ x3 C  N3 V8 C* m
  315.         {4 ]) B, A. F& s2 T6 E% Q( }
  316.           file=(*p).second;
    1 N3 m8 f. Z( v! m$ @% i
  317.           free(file);+ M7 [+ Y5 P, ]6 [; e1 u, E
  318.         }
    ! @; \  G! k" M
  319.         UpdateFile1.clear();
    6 G' K! Z' u+ H3 y: m
  320.         UpdateList1.clear();
    # ^" U5 }  x- u& a' S" [# Y( H
  321.       }* g! U5 t9 X; ?6 c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ w. T) f. Z; x% }  [
  323.     }  |/ e& M) i) q- D/ G6 Z7 @; F
  324.   }- ^5 R1 [5 l7 F! h7 D0 d
  325.   return FALSE;; l( o+ D5 Q9 m& y
  326. }% L) Z/ e6 M" i" {' [, c8 x

  327. 4 y' N2 ^9 {" v  l4 U
  328. void CRevAppApp::ClearAll(void)9 V7 N) Q$ g5 O% d) s8 h4 g* N+ W
  329. {
    7 v2 f3 [& P& f, q
  330.   LPUPDATEFILE file;. k% E* @* [# i6 B' s: C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 M& y" {7 A" K0 y7 I( j# S
  332. 2 S& |; D6 H9 k* q# p1 `
  333.   if(UpdateLocal.size())
    & P- W9 A& X. k1 x7 q
  334.   {
    - \$ d0 }- L/ r$ O
  335.     UpdateLocal.clear();! P8 Q% m- W. c- H3 x! k  K
  336.   }
    $ p0 H; l1 P8 _
  337.   if(UpdateFile3.size())7 C& ?* l) F8 e8 h- N: Q# m. T
  338.   {
    . t2 P( a% d: M. e, P8 I' L, E/ Q7 D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 ?; M0 \8 T2 `
  340.     {
    0 d: a& {4 x: X+ d/ e1 ~8 g
  341.       file=(*p).second;
    ) h& b- O/ N# b7 x' h
  342.       free(file);
    7 d+ d6 |0 K1 J1 Q" P3 u) J
  343.     }
    2 m" u3 k0 r' A5 i& P, C
  344.     UpdateFile3.clear();
    + j# L$ E  p3 R& C( a: `
  345.     UpdateList3.clear();& H4 w% r  E) r, [8 r: e8 t. X( J
  346.   }5 v! f4 X) v: M* [+ f8 z
  347.   if(UpdateFile2.size())0 i- ?4 t- ?4 E% f
  348.   {+ s9 T: [: B) o$ B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 e" c+ O+ ^% a0 U* V
  350.     {$ n' w5 c* E; K( D
  351.       file=(*p).second;  c$ V# }5 O, ~' A: u$ Q
  352.       free(file);
    1 Q6 p! O) b/ ?, ^& P; X
  353.     }$ H" s8 Q  P, [. _. L' e! `
  354.     UpdateFile2.clear();
    ) \2 T. d. m  D  u/ X
  355.     UpdateList2.clear();) @' B7 o# y# T& J# ^7 m5 b
  356.   }3 X& p# T3 ?8 t+ q7 T
  357.   if(UpdateFile1.size())
    7 L5 ~; i/ A, h. n5 ^
  358.   {
    - m3 l8 Q! D: x) W3 H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , r3 ~$ @0 r7 H6 N% g9 Z
  360.     {
    9 Y; v* y% F: v, E& E: ^  u
  361.       file=(*p).second;
    ; Q' j3 h$ q8 K% [/ ]. Q8 ~6 n/ j4 \$ s
  362.       free(file);# \% k- i" |- b, M: e
  363.     }6 j$ P9 E0 A8 k% a
  364.     UpdateFile1.clear();
    2 y' ~: k% A$ _; A
  365.     UpdateList1.clear();: v' R' E  z" T, M" r6 h
  366.   }
    2 ]! {4 q4 _! a
  367. }  4 X2 Y( A0 s6 c3 {3 _" h
  368.   
    + K1 a. s9 O" N! n4 c
  369. BOOL CRevAppApp::CheckLocalVersion(void)* ~5 h# I' X' v& Z
  370. {$ S% F/ T* s% W7 r2 v% ^2 H) J# D
  371.   int c;
    8 F1 C1 ?: `% w( z/ d; _; ?
  372.   LPUPDATEFILE file1,file2;
    9 H/ f. t; S/ G; ^0 k" f  E: m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;' s; P, ^& o6 b7 O" Y! T8 V) z
  374.   std::list<CString>::iterator l;
    ; C$ n9 Q/ v0 e, B" V
  375. 8 ]4 s3 G+ N# O- R* x- c
  376.   UpdateLocal.clear();
    " @0 O% B9 w* v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 b' l/ |7 \: d) z5 X5 @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    7 z8 B$ C% j( S3 f# p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 `) h: s+ i4 x' m% T! K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ ]5 x  o+ A7 {, H, V" E1 z3 N
  381.   if(UpdateFile3.size())
    * k) Y, t& W& N; T
  382.   {! j8 S7 g7 z6 m# g& }8 ~( y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    1 A3 I  F( t1 Z- Y( A. O$ \* K
  384.     {; c. i# S( z7 ?: T  p) e, I
  385.       file2=(LPUPDATEFILE)(*i).second;
    - h& N. N. r% r
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 L  F6 \' D9 ?) _( q
  387.       {0 i2 o; J" U& _2 G4 h
  388.         file1=(LPUPDATEFILE)(*p).second;
    % `, i5 ^* i) o, c
  389.         file1->vers=file2->vers;: O1 x! m3 q. M; o
  390.       }$ R1 ~: u: H$ m# u: A
  391.       else$ h, O2 \& V0 Q( k) ~9 m6 F
  392.       {
    2 w! R9 L, U% I4 g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . @5 _8 Q# s) Y, d5 e! A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; S5 u' _" m+ \! {3 I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    7 S* E& R8 @, Y1 W
  396.       }
    : R/ d" S2 ^" I7 K4 R" w- H1 m( ?& _5 q
  397.     }& O. J  H; B/ n; g, o9 h2 O- X
  398.   }! R+ `' s/ j1 ^4 K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 y1 b- a6 v1 m! r  @  C3 |
  400.   {( |" W/ a+ }" {" p$ D$ E. d& O( b, r/ G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 F% ^6 N% B* B  Y! k& c* ^
  402.     {+ j3 ~5 X9 e# n# f% p+ w
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 l8 N7 ]9 F# p0 T9 m+ |4 X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ A" ?* N- L0 G, v
  405.       {
    ) a$ d* z: ^6 P4 H9 j
  406.         file1=(LPUPDATEFILE)(*p).second;" g& u% [) t* j
  407.         if(file1->vers!=file2->vers)  y# m8 [5 ^& n. b: F5 b% J
  408.         {
    ( T9 U% r$ G' @* s; p' v( n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ b, ]9 R( h3 `/ E/ ?: g
  410.           c++;$ S! M$ n* j0 \6 @
  411.         }  V1 ^) }" J% H5 ]* R' n4 F
  412.       }/ t2 K% e- @1 H1 K, h* s
  413.       else1 h  Y5 A" i" |" h0 h# v; ]4 Z2 q
  414.       {
    - [( @/ Y: u- {7 B# {* H" l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - `; u" R. b% b! O% A, c
  416.         c++;6 V# Y9 `& S( Y8 [8 r% r
  417.       }  J% j( Z7 O1 p6 }: d; K# v: k/ `
  418.     }7 S& R" y3 m; q
  419.   }
    , k4 ^) p* Q9 f# B  I+ C
  420.   unlink(".\\DownLoad\\update.txt");% \/ M3 _+ B8 R) C2 u7 u( t
  421.   if(UpdateLocal.size()) return TRUE;* F; f" X. D# W2 [6 |, }* J! o: K
  422.   else                   return FALSE;
    * P0 V1 {+ Y: J( \+ D* `& Z0 ], z
  423. }
      ?' A( j: m/ q) l
  424. + B# W5 l- j" i, H6 u1 J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 g3 |: d$ J% G  U4 L8 e& q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( A7 e% M% v! P! R9 z% Q, b7 C

  427. $ p% F. j1 m  B" t1 @- z8 p' _7 y9 p

  428. $ l3 @; s; K: K0 o8 D9 v7 w

  429. 7 K: Y  [! I, `5 t, e  ?
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# v9 q' g/ P3 E  `5 S  s
  431. {7 K5 b& u* j; w6 I
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: f" }8 ^$ e9 P4 J) N
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ R+ x( r9 ^3 t, ~
  434.   {. i: f4 c5 B& \0 U* J
  435.     char szLanguage[50];2 s* O" S$ Z! ^/ P0 Y) V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* C+ j" r# |8 t
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 k$ s0 B7 F# h" n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' d; b& \2 F2 s' v1 {8 ~2 ~9 u
  439.     else                                   m_iLanguage=ENGLISH;" }; G2 Q* _" j4 o0 ]  k
  440.     char szRegister[100];
      n2 P; [$ @/ f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 R" b- S- x7 W0 b
  442.     strRegsName=szRegister;
    7 G  Z) h" ^6 y) d% ^8 ^: x$ B& {7 A
  443.     char szPatchURL[100];
    # A8 P+ {4 O, B% o7 Z9 g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 c" _0 o7 u7 Z& P% y. {8 m% i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 U! S! f1 }+ W3 R/ K0 [0 E' y( [" R% S
  446.   }. j$ y$ V- ~% a* w
  447.   else
    ; D4 \) f' B9 L9 u- a0 N( S5 ^( P- m4 X
  448.   {: a& ^' |7 B9 \; Q1 r4 [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# K. B) [6 h! j& a5 g0 ~$ c
  450.     strRegsName=DEFAULT_REG_URL;0 g  O6 _9 j6 e6 f5 W
  451.   }
    2 M' Q* N1 O' G5 D+ U  e6 \# C
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & b$ h) a- a. R: L4 L% @" w1 W! e
  453.   {1 J, j- s, g7 Z
  454.     char szIP[50];- n4 f) o! P) F
  455.     char szDIR[300];
    : O* ]& R6 T, G2 C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  M. _, I, k! `; Z: |7 Y' S: H
  457.     {
    ; ?' G; K$ `  {4 F, ?2 [
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , U: V8 L( f; I5 _
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 K9 f* f! N6 Q. G4 K
  460.       strHostName=szIP;
    % R0 S; y% }1 ]2 l/ [  u
  461.       strHostPath.Format("/%s",szDIR);4 K- R  r6 n) V, ^, h" [; t
  462.     }
    8 @& k0 P; a$ F. G6 u9 x- G
  463.     else: U: b' V# w$ G0 S3 ?- Y' y
  464.     {8 K$ Y( O: y9 \+ t2 n
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 c: `2 _1 T! C$ d$ y7 @& ^4 f
  466.       {
    3 S8 h- d' d2 F7 |% c7 a1 n2 z1 S
  467.         char szLanguage[50];/ f3 w+ H7 [  k' k9 _/ t6 c& H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 J8 D9 U( T1 D: l# }/ N8 ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 `* h+ L, W) K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 E) d0 j6 `5 i& |4 r. }: F
  471.         else                                   m_iLanguage=ENGLISH;+ g' E& s& t$ a2 Y' U  [$ {$ m
  472.         char szRegister[100];9 ?' D* y. U, u* x; D+ {+ s1 M; I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! w0 J. \0 W$ e) @
  474.         strRegsName=szRegister;
    ) D6 b; `" A4 Q+ [7 W
  475.         char szPatchURL[100];
    ! V0 w8 P( P9 }# h% O) H+ k  v
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 C  B! @1 \, P; p" C8 [
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      V* U! F1 X6 B4 P9 U2 c# Y
  478.       }
    ( F2 ]4 O5 n  p3 I
  479.       else
    3 Y, K  f, n1 q! l9 x# S
  480.       {' n( n$ r! q) k  H
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 S% {1 F5 l5 r3 u7 [# V3 q
  482.         strRegsName=DEFAULT_REG_URL;& l) Y, T9 n! }" O
  483.       }+ q9 l5 q1 U% u3 Q+ |) n8 a# x
  484.     }( `& N1 B  r# X' ^) C
  485.   }8 o+ B8 d% h' z. V5 g8 P- B
  486.   return true;
    7 B* p; E6 b0 E. B8 G
  487. }4 }" l+ s) X. O" r) l5 S

  488. 3 o. b. V4 [; W; p, J) N6 }+ |
  489. #include ".\ZLib\unzip.h") r1 M1 [, M" t4 {: c4 C; ], G
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, p( T, ~& p" h4 h
  491. /////////////////////////////////////////////////////////////////////////////+ \0 v1 {; \( H" q% X6 y
  492. // CRevAppApp initialization) u# y) i1 O" b0 L0 M

  493. 0 \* i$ t" ]* [+ a1 |
  494. BOOL CRevAppApp::InitInstance()
    1 i) D$ U8 v/ m; |+ t
  495. {$ b: u+ L: E1 w+ A9 S9 P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) [& q1 B% S7 H
  497. 4 z/ Y2 O, [( i) J% Z; g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # r8 g, D1 p; W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + `) Y% o; h, n5 v! f7 R7 F' u
  500.   {
    ' r4 a" D! D& b4 @/ O9 P: @. W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, V. m2 v; O$ Z5 v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 L1 X' I$ u( `0 j. ^1 Y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % E( M" k1 L$ T. @6 q
  504.     {+ B2 {" H2 T) g: B! R4 H
  505.       strcpy(szPath,szPathTarget);
    * \# r) c, I+ M" y) G( E6 ]7 I, |
  506.       SetCurrentDirectory(szPath);, M$ Q% v- S+ |/ Q
  507.     }2 i# b+ q8 y* ^, e
  508.   }1 W0 @1 C4 G- g6 Z* }
  509. #ifdef _DEBUG+ o% K* O! N1 I6 c
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) v, `1 C  |. m+ E" ^( p
  511. #else- V) y) y8 x2 ?- j
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # J( R, i. w# y# G+ P! V; D5 |; `" T
  513. #endif" o2 t' X! n* Q5 P6 m
  514.   {
    : u5 u, ~+ {3 B4 F- _0 A
  515.     char tempFileName[MAX_PATH];
    ! |+ s* t1 s/ X
  516.     strcpy(tempFileName,szPathSource);. u1 k5 O) b$ }/ t% l) s) R
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , T- u* G3 G- A( v6 c+ A
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 m2 ?) h9 o4 N: R" c# k' N" l6 d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 E' [2 V" Y+ [7 a# W+ d  @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 r& I6 \' m0 W% K. D+ |+ Q
  521.     return TRUE;% P8 m" j2 V' d- Z0 N8 C9 m0 l
  522.   }
    $ @7 k; g" A6 d/ d& g
  523.   // Nuke 0118: Delete run.exe! e/ o& j! h/ @7 ^# q. M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- z* J4 ~3 D4 n. T7 y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 d3 E3 @; w0 ~
  526.   if(!ReadCfgFile("Config.ini"))
    & `. Q, Q8 ?; \2 R9 r
  527.   {7 K2 h' p) T- Y% ]+ J
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);# F, x( R9 e" D
  529.     return TRUE;' O+ ]: O7 |+ M' q2 u8 @/ `  C
  530.   }
    & S' A4 S9 W4 e2 S2 W
  531.   HANDLE mutex;
    4 g, [; Q- J% ]* @9 z" a% }+ j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): U) C& e( c4 B, W; v. I/ Z
  533.   {
    4 R; T& F; j7 m' ~4 H6 r. E
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ @# o* u% R; M; N
  535.     {' X7 w5 f* A9 x- W
  536.       CloseHandle(mutex);2 t$ W% m4 D' v8 P/ Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 H' y1 f. `3 u- y7 `. i9 S5 V
  538.       return TRUE;
    3 ?7 ]0 T2 K8 [9 I# e
  539.     }6 o# Y) k# g$ M! M% w7 [
  540.   }  
    2 j8 V1 ]; t9 f6 B2 Q
  541.   CloseHandle(mutex);! x, T! ~4 z" [8 p5 ~

  542. ! l0 r8 z! l' U( k1 y0 _# E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " S+ k( m8 s6 k% s; O9 f  {

  544. " O' B6 ^9 ~' g# c7 n) X. i! W) e
  545.         AfxEnableControlContainer();
    . `2 q+ l8 K* C" i/ }
  546. 3 S& \. l8 w( X5 @1 N
  547.   bCanUpdate=FALSE;& y: l3 F# [& k8 ?- s4 t
  548.   dwStartUpSteps=1;, b% V3 h5 i! @( D0 f
  549.   dwProgramState=AP_NOTHING;
    7 G/ t7 |/ ^% f( Q- ?' \1 z5 X) ]
  550. * K2 b3 b/ m, S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& w4 f6 G8 ?+ K5 H9 i+ j: B7 @

  552. 7 {5 U5 P1 p( q- n7 N% x6 K* J
  553.         // Standard initialization
    ( q( ?+ f1 G8 d5 P) ]
  554.         // If you are not using these features and wish to reduce the size
    6 n$ p" ]7 s3 {/ u3 N: {* s
  555.         //  of your final executable, you should remove from the following
    # w" o8 ]6 l1 f+ n
  556.         //  the specific initialization routines you do not need.. k- c; h5 {  ~! }
  557. 6 f+ L7 M0 U; ~* H& S
  558. #ifdef _AFXDLL
    " n3 Y, i2 |3 ]4 K( i
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    / t; l7 y! S4 A8 [9 T+ D
  560. #else& h& S* p9 D/ L5 P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ t7 E  e% c! D4 v  y# |
  562. #endif
    5 E+ x, Z/ |. Y, D* L
  563. 7 @/ G" q6 G- ~1 z) h6 ^" e
  564.   dlg=new CRevAppDlg;, S! @# }# O" L: }6 O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' s+ T2 d+ ]0 ]. g5 x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);0 K" d1 k( c) r/ \
  567.   m_pMainWnd=dlg;; m; ~3 B. U: Z! Z* n

  568. & k, Q* `. B" L2 L/ M
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    6 _* r) j8 E) L: ?" [
  570. # d' M* m' j7 f$ ~8 P: z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! }7 ?. O! c# e; b# A
  572. //  ULONG_PTR gdiplusToken;& i! b2 b+ b- I7 `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; S- S$ ]6 ~9 z
  574. " t2 v6 F" o: s5 h  n  L/ l
  575. //        CRevAppDlg dlg;
    9 U9 `+ s/ S2 |: ~5 _
  576. //        int nResponse = dlg.DoModal();8 f9 W! X' _) A- r
  577. //        if (nResponse == IDOK)
    " {- l; D8 l" \6 a
  578. //        {, ~& p1 }3 V  i( p
  579. //                // TODO: Place code here to handle when the dialog is
    . a; W1 J3 p% m5 d
  580. //                //  dismissed with OK
    , r1 C: c( y, d
  581. //        }
    ( h8 R8 _. x  g
  582. //        else if (nResponse == IDCANCEL)
    " t) L# ^6 c, V% h. a! {
  583. //        {
    7 }) u( j' P( ?( r
  584. //                // TODO: Place code here to handle when the dialog is
    4 {; q/ G3 l( @" g$ `( h
  585. //                //  dismissed with Cancel
    , r7 |; O5 j/ A* [
  586. //        }* r; X2 M, \* R8 r6 b5 X$ D. K
  587. 5 H) H7 ~8 k) i* p- b* g
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' ]4 Z/ C% z1 X
  589.         //  application, rather than start the application's message pump.
    % p! w; M# x0 C! h& I
  590.         return TRUE;% n% p- c/ t: {* r9 f
  591. }: Q! _6 J* ]+ Q. H  I" x
  592. 0 X0 y7 e; X1 N/ A' ?, h4 l# h6 B" i
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) c  y7 `+ p; Y& Z8 o; Y7 u2 ~9 Q3 I
  594. {
    4 z1 A# B3 o: E
  595.   int i;% C  ?4 Y* G4 w: d% C
  596.   char *szRet;5 D9 o6 |4 L% m* r% q- M( M
  597. % X* O: P- R' l7 d5 e  n$ f% b& k
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 R* Q  c" f3 s; E9 V  J; s0 H
  599.   if(sztoken)
    3 g* e6 t' a$ i2 h
  600.   {
    + P4 o2 [" h- f1 z2 i! x5 v; [
  601.     szRet=&sztoken[itoken];4 w/ F) R; b7 S6 V' ]
  602.     while(sztoken[itoken])
    3 z/ |1 U! ?# @- Y$ _& N$ q
  603.     {
    ( f9 D/ o' h4 O! Y! f
  604.       for(i=0;i<(int)strlen(token);i++)9 [5 ]# c) g1 F3 j& x9 G
  605.       {# \# `# Y% ?$ R; q8 G( F0 L: @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 x. X/ r# Q. r' p3 [
  607.         {
    * g0 C$ K2 N. I
  608.           sztoken[itoken++]=0;0 v, d0 v3 }; T3 e
  609.           sztoken[itoken++]=0;; E8 h9 @' M9 y' C  @7 [$ H
  610.           return szRet;; z7 U0 l4 f+ q. ]
  611.         }! a; `" {" R9 h; D4 Z
  612.       }
    : ]! N4 w. J6 c" j# c
  613.       itoken++;
    & g: q. r' f  y' x/ R
  614.     }0 g# C7 [( H9 a7 A# x4 L
  615.   }
    5 [8 }1 z$ p9 b5 G4 k
  616.   return NULL;
    & [1 G9 H7 E! g$ ^+ s
  617. }. l7 j' X6 M. f( P! R
  618. ' `, x. m8 r+ Q
  619. void ProcessProc(long Total,long Current)7 v( Z0 e9 ~- b" n' j) c
  620. {2 Z. w' B, ?) \
  621.         MSG msg;1 j( o7 H! J( |$ x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 ~! n8 D4 L) ~/ s* J4 h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 V: |2 p7 {# V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); @# o# A1 [: E+ V2 y
  625.         {- ?, c7 k2 Y. `; v* W3 l5 }
  626.                 if(!GetMessage(&msg,NULL,0,0))4 i& E, }* K0 y7 Z+ t: E
  627.                 {
    % E% U- d, u' l) _$ y
  628.                         return;
    2 N% L( p/ X5 e: t3 O
  629.                 }4 [) W. i3 ]' L) h) L( T1 n
  630.                 TranslateMessage(&msg);$ e6 h1 C9 j0 B! u! W
  631.                 DispatchMessage(&msg);
    0 [) ]- v$ r' B
  632.         }        % F+ b8 a1 G: w; C0 A6 |0 n
  633. }
      u% j% R/ E6 p0 ]: M

  634. ! y% U( x2 J* m% M" G3 d2 P3 I8 s
  635. BOOL bFirstChar=TRUE;
    ' _7 t  W+ Q4 q$ v6 {

  636. ) d7 m4 d# K+ x" V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 r) I' @+ P, y) t3 s
  638. {
    - ?7 A2 |; p) [% z4 T
  639.         // TODO: Add your specialized code here and/or call the base class8 B- V4 `" _/ ~) s& J' P0 O9 ?3 D8 {
  640.   switch(dwProgramState)% t$ ^* [4 @- h6 |) S2 h
  641.   {
    + Q% Z9 ]8 u# {- I: j' d8 h
  642.   case AP_NOTHING:
    ; Y# O! f4 Y& `, ^/ R* \% K
  643.     switch(dwStartUpSteps)
    $ L# F* j# H6 O9 }* ~
  644.     {5 ^" O/ W" P( N1 m' }% @( \
  645.     case 1:8 E) c/ M3 a+ L' k
  646.       {2 ^9 T! t4 x4 V1 |* I  H
  647.         int i;
    7 K3 M% b% l" A& c
  648.         CDC *pCDC=dlg->GetDC();
    ( p! }8 E! m! O
  649.         HDC hdcwnd=pCDC->m_hDC;: D" e! {& e3 k2 t# G4 C. A
  650. //        Graphics graphics(hdcwnd);
    4 S  ]! G1 z/ O+ W7 R4 R4 q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! B2 e" G4 c! u& ?% @$ i
  652. //        INT iWidth=bitmap.GetWidth();! h+ m. U" t- ~5 r
  653. //        INT iHeight=bitmap.GetHeight();
    6 i2 g" P4 J) i' {
  654. //        Color color,colorTemp;. @- K, P/ g- u9 O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  h: |1 p$ O5 w; ^
  656. //        {* h. ?0 q7 l- ~+ o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( t8 r- w" J$ X  Q* X+ h$ I
  658. //          {
    " {' n, A# L7 W% H& ^$ e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" n2 }3 x- j3 w, Y& s
  660. //            colorTemp.SetValue(color.MakeARGB(6 z  o& ~0 B1 Q0 |
  661. //              (BYTE)(255*iColumn/iWidth),7 J2 n+ E5 ^  D6 U
  662. //              color.GetRed(),
    0 e- i+ y( v+ w
  663. //              color.GetGreen(),
    # ]; X  k- K  b3 ~5 a/ H
  664. //              color.GetBlue()));% F& y4 {, {$ W
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, q8 q  x' A' \  w7 @- Y  Y
  666. //          }( m/ k$ T. x% Z( @8 `
  667. //        }
    ( b. x8 I3 l$ Z7 z- Z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ j- `% b; I' q* M& |
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* z6 S% t# ^: Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 U6 N6 s1 |+ g  V3 q3 K+ G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , O2 e6 [& u( }5 J- |! i
  672.         for(i=0;i<240;i+=8)1 W2 W' d3 G. x5 `
  673.         {
    9 i7 U& G8 ]/ V
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" p1 k/ ?  Y. o5 Z! Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 G4 z" U% }' O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ z+ }) }- h) [* h: r- }. S! C
  677.           Sleep(33);; t. F& r7 ~: K( ^7 S
  678.         }
    $ m4 K. i: t/ U8 d5 g/ [& S
  679.         Sleep(1000);
    ! k  n$ h& W2 W2 q" |
  680.         for(i=240;i>0;i-=8)
    . n+ }) z2 G" L* v/ a$ E
  681.         {3 v1 |, h# {$ e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 [% S. H- b& A# `0 Y1 O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) e  a" n9 d- B  w+ ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 h3 g2 R+ ^5 H" Q# K3 ]
  685.           Sleep(33);, h9 y, s7 p& b* q, B' I: ~0 t
  686.         }% f# n3 L, H0 z% J
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 z6 c$ D( \! b! P' ?) n
  688.         dlg->ReleaseDC(pCDC);  y; L4 N& E: p1 ^2 o( `8 k
  689.         DeleteDC(hdctar);
    / M4 b8 |. `  F. k$ \' B
  690.         DeleteDC(hdcsrc);4 G9 r) ~) {( c
  691.         DeleteDC(hdcorg);5 U0 y: s7 @5 U# @! H5 E5 q$ w
  692.       }
    ! ?' y8 r. n1 Q( p7 @& g9 C: M" c$ l
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - s" M% N7 s3 H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 x3 a# n" X; G8 Z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, U' x( \) c& A% Z5 S5 Z5 c
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 J* O3 g6 E6 Z- Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 @' {  t2 f; H  m' j
  698.       if(!Dn.Connected())
    4 j1 A/ K! M5 ~7 M4 W& d: G' C
  699.       {
    0 C3 T) {5 J* p. [% x
  700.         dwTotalFiles=1;3 b% a+ A) M3 i& @2 g! P/ G
  701.         dwDownLoaded=0;
    2 Z4 a" G# n3 G; G$ l2 _( F
  702.         bSilentStep=TRUE;0 _! i! X; h1 e
  703.         bCompressed=FALSE;
    4 B3 \$ Z0 e5 O- C9 m' d* Q1 m
  704.         strExtLocal.Empty();1 c- G2 s3 [  F. |2 Q; p
  705.         strFullName="readme.txt";% |6 x7 e$ }, ?9 s2 t1 j
  706.         dwProgramState=AP_CONNECT;: }) |1 |6 q" g# w8 N# s
  707.       }
    ! S3 d5 c. i9 n  J; i7 w2 a, F% _  O
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 j7 [0 K) L1 ?$ X! P' C" @3 \/ ~
  709.       dwStartUpSteps=2;
    - ?. d: T0 f' A0 P: n
  710.       break;! {, B7 X. b  Z; B' D! s9 w
  711.     case 2:/ s4 l& q" `7 ~1 B" m" u3 O1 K  n
  712.       {+ V5 [( x* o: ^- H, V  p" a7 z4 n3 b/ Y
  713.         int iEOF;
    ; P9 Z* E' e; S# D7 @
  714.         FILE *fp;: m, \" b& r5 h8 E6 G  t9 H
  715.         char szString[512];% q# h) |( X% x- a: A( b5 w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ j2 n# M# ]  @! @# j" z$ b# `
  717.         if(fp)4 ?  Y6 V0 u) Q$ |: M' n- O8 `
  718.         {6 y# z6 X  D0 X2 I% T
  719.           do
    7 x. X3 V- m' k; b7 J# |5 X4 D" x/ X
  720.           {
    # ?& A6 Z) F6 B( ^3 _
  721.             iEOF=fscanf(fp,"%s",szString);# Q" \; t! q7 L; v9 Z! N7 O: K6 M
  722.             if(strlen(szString))
    7 x; n0 I3 O9 m
  723.             {
    2 r0 O7 z1 [$ U3 j; Q
  724.               if(bFirstChar)2 M8 O1 O& L3 j& o
  725.               {
    % y: v' h, S. u- N- ~: e
  726.                 bFirstChar=FALSE;
    & W! ^; ~6 b7 U5 Q$ N
  727.                 bConnectIsBig5=FALSE;* d% W7 X- e2 z; C& N4 M1 C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & i( Y; p1 s7 Q  T' ^
  729.               }% X2 @. ~8 H' t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 [# n8 V2 T$ [* q0 s$ A$ h) T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ l1 `- F+ Q3 A/ X) V, i
  732.               dlg->m_ListText.AddString(szString);
    - H$ P3 J2 d, t3 R4 V
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : J2 O, ]. R9 F6 x9 ^
  734.               *szString=0;7 _: ]' v. D4 w2 G1 ~! R. e/ p
  735.             }
    6 ?) s" {8 P, E9 H
  736.           } while(iEOF!=EOF);8 p/ P2 [& ?( s# H3 }' A0 T' u
  737.           fclose(fp);+ y" L, k3 d3 Z' g8 z- j
  738.           unlink(".\\DownLoad\\readme.txt");5 v) h5 Y7 r. f. c  K  E% Y; K2 r4 }
  739.           dwStartUpSteps=3;
    ) Z$ d" d4 L" p4 T
  740.         }' f, q. G! v: l& m- v2 |% w; @6 }
  741.       }1 h0 Y0 j$ H) D2 C2 {: a7 X
  742.       break;
    0 H, ?" N  O' m' z
  743.     case 3:
    1 v. F5 r: m2 N
  744.       if(!Dn.Connected())
      Y4 L' j! N7 y# k
  745.       {
    * b$ G1 f  Q  N' O  T: G$ P; I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 x1 E. Z7 F& }! \  o
  747.         dwTotalFiles=1;
    ! ?* G$ n. T+ ~8 }+ N- x
  748.         dwDownLoaded=0;
    9 V8 [( M2 w# ^' \8 f; J0 k/ W! A
  749.         bSilentStep=TRUE;7 H. E3 G# X/ d7 P9 V
  750.         bCompressed=FALSE;: G8 M8 _+ P# O. f* Y
  751.         strExtLocal.Empty();/ t3 e/ P# V0 h% Y7 y
  752.         strFullName="checkversion.txt";
    0 W2 u# g/ ~/ d9 I0 Q, |6 N8 k
  753.         dwProgramState=AP_CONNECT;
    8 g+ t, n* N$ [2 y/ `7 B
  754.       }* _3 a% C# C/ J9 E. F9 D$ k8 @
  755.       dwStartUpSteps=4;0 U& B2 M" j7 ~: o
  756.       break;7 I  i  W  [6 `4 F' i) e
  757.     case 4:
    % c. m# j+ |. e
  758.       {7 Z, R. e( s1 k% G6 r
  759.         FILE *fp;8 {  f- n/ c+ B: H
  760.         char szString1[128];) w, y7 {) O$ z
  761.         char szString2[128];
    % D: @* U2 M$ s2 s
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    : y6 v* |3 H0 Q9 H6 q8 u& f* \2 P
  763.         if(fp)9 e- h% Z, d) f
  764.         {
    1 ^1 Q4 o+ Y' k, R" ^' ^
  765.           fscanf(fp,"%s",szString1);
    " @1 R/ e+ |5 I3 @! e/ v6 @7 d. v  i
  766.           fclose(fp);
    " Z8 A% o1 j. C" c$ K) d- ~
  767.           fCheckVersion=atof(szString1);$ ~  l$ F0 w6 N
  768.           fp=fopen(".\\checkversion.dat","r");
    1 s& V/ x2 k4 H/ r. `
  769.           if(fp)1 [- m/ H5 x: l
  770.           {* x, @8 K* B+ \5 V% Z/ X: C
  771.             fscanf(fp,"%s",szString2);8 b! H: f( f  D
  772.             fclose(fp);
    2 A) }# B/ F7 G- P. @; B1 S) @. e/ _
  773.             if(atof(szString1)!=atof(szString2))
    # V2 D5 D3 E: Z% d8 Z
  774.             {9 g- U2 A* b' y3 O( [2 q
  775.               if(!Dn.Connected())* p* ]+ x6 J: j6 `) I7 I( @
  776.               {
    , a4 R% {* w1 g  Y# q  d" g
  777.                 bFirstUpdate=TRUE;  {1 S$ m5 B/ Q* q; V3 [8 U9 l
  778.                 dwTotalFiles=1;) @3 ^* y, t4 I7 ~" \3 b" w
  779.                 dwDownLoaded=0;
    4 `$ b. W- Q9 K: l
  780.                 bSilentStep=FALSE;( b  [0 E9 \7 p; b2 X
  781.                 bCompressed=TRUE;7 p; F2 |$ t2 ~) z- V. M% A# W
  782.                 strExtLocal=".\\DownLoad\";2 c! P+ Q2 Z' a8 ~& ^
  783.                 strFullName="update.txt";
    , k2 D0 w$ }. I  ?5 u- t# F& Z
  784.                 dwProgramState=AP_CONNECT;
    % q% P$ [- ], r5 L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 J/ q/ _- V4 e. d: H7 Y* L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( V" v5 C  `* S. T9 C4 E; f3 ^; |
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 n" s6 L5 m) u' d5 G# `6 d* H

  788. 0 N( u+ l1 O! k+ m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! A( @' V. ?/ W  i& s
  790.                 unlink(".\\DownLoad\\checkversion.txt");- h+ y) F, Z4 D, R3 l+ _9 \" Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ' X$ X# w. m# G0 C" v3 b5 Z
  792.                 {% ~8 g, c+ L. k: X# \; w$ w* e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! f: P: K, A, ^: x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. O0 [& w1 m0 V. x2 I5 [2 ^  E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");0 t1 w7 M) V5 C3 ]7 P  f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' i* P8 _- p0 V* I; V

  797. * U+ t* Y5 l! t; F  K
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" o# ]8 e% a) n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 _" f* j. A, Z' Y1 S1 R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 L/ G6 e, V: L! J4 {9 @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! @& q- g0 b; i! l! g
  802.                 }
    0 I8 p8 ?) c, M! c% p* h9 b' [
  803.                 dwStartUpSteps=5;) m( i( R% k* P3 [) P5 T" {
  804.               }% ]1 Z3 e: S+ ^" y5 @& \6 x8 D) q
  805.             }; q% C) \3 H# W' r! E! d; D0 F
  806.             else
    ( F% c& r2 j, B
  807.             {  [. d" B' Q/ u
  808.               unlink(".\\DownLoad\\checkversion.txt");3 i( m# Q, g6 Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 O* h( O2 {$ p5 o$ N7 \
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: [: ^" f' f6 o7 U% N, p0 T7 r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" Z: J, r3 W3 L, m7 G6 v- s

  812. 5 g* p9 X; V! y  p( ?
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; l% o4 e7 d7 Y1 M$ |9 D
  814.               dwStartUpSteps=99;
    7 _, {7 F$ f1 O# z6 r
  815.               bFinishUpdated=TRUE;
    0 v1 c- y' `& P! F2 k
  816.               bCanUpdate=TRUE;
    # u6 k5 c/ B0 n" G
  817.             }' v* `" h) m/ q5 S. k" g
  818.           }) z! p% z) y* ^' Q4 a; ?$ g
  819.           else  v: [6 a: L2 E* z) u
  820.           {% j) C$ c* a1 k
  821.             if(!Dn.Connected())
    7 _& m" z( L* {& i
  822.             {9 Q" b) v& `' B3 K3 ~
  823.               bFirstUpdate=TRUE;( _/ L# b$ Q# u. l9 V8 h$ ^& R
  824.               dwTotalFiles=1;' _1 J' C: X) G! i- ?, u- e
  825.               dwDownLoaded=0;. z5 c/ H0 q1 i- D6 W! |
  826.               bSilentStep=FALSE;, W7 D3 L5 W6 Q* d2 ]+ s1 ?* y
  827.               bCompressed=TRUE;! c( S- s" a' s
  828.               strExtLocal=".\\DownLoad\";$ }- ~9 q% Y# n* u. b7 ~; Q; i
  829.               strFullName="update.txt";7 I5 H4 z: u; S5 r
  830.               dwProgramState=AP_CONNECT;
    0 I" r: U' i3 ?5 X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* D% d9 M9 u" m7 B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 Z/ W7 l% E6 O* ?5 r
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + a% h& C8 g- @- S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ M! s& b3 h  s' E
  835.               unlink(".\\DownLoad\\checkversion.txt");
    / a8 f9 E# o3 }% w0 L
  836.               if(GetFileAttributes("Wsa.zip" )!=-1), m) B$ p/ b0 C- Q1 `* s$ k  ?
  837.               {' g1 s- T0 {1 k% f$ Z1 E7 X
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 o9 a2 n3 m5 ~3 w- n
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 ?* b' L: j  ^9 g- z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");+ {, ~1 m' Q9 l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 u  P+ T" Y, `
  842.                
    8 Z: }) Z" H$ D+ C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 B8 h8 w3 V1 e+ x2 K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  q- l- k3 T0 a6 _! m+ O! l6 l- m( I
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' s: {- y8 o' `1 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 Y" `' u8 @7 R" u# q: v
  847.               }
    , K# X! L7 R1 s; \* v! |
  848.               dwStartUpSteps=5;
    # Z8 o7 Z4 Z$ n  i
  849.             }# }0 \, k' @8 ?% Q/ R& q% Q
  850.           }5 i6 P" ]  [# ~4 f/ u
  851.         }
    2 [% `9 z! Z9 D" f
  852.         else, X- y) Z' r) {0 L5 d
  853.         {0 }5 e$ Y3 \8 D9 k3 H: h, t
  854.           dwStartUpSteps=3;
    4 X1 {6 n) }6 S8 \3 U
  855.         }
    * F1 u' n( _% t4 P. p: `3 L
  856.       }
    # o( ?# P# L$ q
  857.       break;" r$ b4 n2 F+ z; P0 ?2 D" {
  858.     case 5:% x: w* @3 |& A- L0 }
  859.       {
    - g1 c6 o% e- j8 b. t0 Y) V  X. W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 {% d# `% s$ P* ]7 o, U& i
  861.         {
      y2 H. R; Z- O5 h7 W! {1 M
  862.           int opt_overwrite=1;
    % S7 c) T! L/ q, Y; r9 F2 {0 u
  863.           int opt_do_extract_withoutpath=0;+ [1 J7 n1 Y  h: `5 o  e
  864.           unzFile uf=NULL;
      n7 K* ]/ _: J2 d; D1 {
  865. / h" u% x# ^: A7 {) E/ G
  866.           uf=unzOpen("Wsa.zip");' w! L( E! ~3 }2 K" f% d
  867.           if(uf)
    9 ?) a0 e: [1 E: ?0 T- O
  868.           {
    ! H( x% A( S" k- T' k1 ^6 i
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: p' i8 z. Y8 w* g+ Z  F; b5 r" b' X
  870.             unzClose(uf);
    ( c" X0 D' _: s9 `) ]7 V5 J
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");- z" y6 i3 O0 b2 w& H: U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");$ B2 o# e4 l% A6 m, ^6 H
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - B: A) A" x3 D1 Y& ~, @! `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! k/ Y. Q. A1 S! p0 l( W+ T
  875.           }3 a. U' C) V# M# c
  876.           DeleteFile("Wsa.zip" );# P) Z* d2 ]  I' f. j; ]
  877.         }1 Z# p7 \0 ?4 T4 J

  878. $ u0 ]7 p  T1 n7 @
  879.         if(CheckLocalVersion())# @0 e) ]( p7 V/ n+ V% ~
  880.         {
    ; c6 C7 C% O: i. ~8 y0 Y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 I# f8 E2 ]) `; P* Q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    , j& i& ^7 m9 \
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");" G% s- }: D- i% [/ j: W+ f
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! d6 C# z% c2 }8 ?# F
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);+ o8 }0 k" W, B: [
  886.           dwStartUpSteps=99;
    + l. }+ X+ O% T
  887.         }
    6 g, r3 g" c. x1 }; @
  888.         else# J$ a+ R( U) _
  889.         {
    7 q6 Q  \, I  N% x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 h- v; L* L6 F7 A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# y9 X: B2 ]" H7 s! A
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    * R$ T5 @- m2 j

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

) ?! t: e3 _' p- L  O2 p0 w& r  L4 L5 W( Q1 ]% Q

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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