CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式

* }: ^: S1 }, S: }8 _" [  K
  1. / RevApp.cpp : Defines the class behaviors for the application.+ C  I6 j( x2 ~, n5 ~
  2. //
    % ]  @) Z) ~3 B# T5 q
  3. # Q0 A8 R$ J% ~1 m* s: |) x5 w: u: J8 Q
  4. #include "stdafx.h"
    ) w7 c) e* H% X3 x, c4 j
  5. - Y: T0 i+ ^4 E; Y) v7 G
  6. //#define UNICODE
    8 y. ^+ Q8 n; a# h4 o
  7. //#include <gdiplus.h>
    / k# {5 K. _) q  W) d
  8. //using namespace Gdiplus;+ S! E4 G6 L) f' a* l
  9. 9 d5 P/ z3 B  L' @
  10. #include "RevApp.h"* A& m5 X) c3 T1 d4 \3 f& t, X7 F
  11. #include "RevAppDlg.h"
      B+ N/ i6 y, w5 y6 F
  12. % d+ K0 Z9 l( q6 S* W- M% Q2 B
  13. #pragma warning(disable:4786)4 P* g/ O: q: {7 {% m
  14. #include <map>5 r8 ^( x$ @$ g; y
  15. #include <list>* @8 c$ e+ c) j; |
  16. #include <direct.h>' L9 p2 j; `2 G7 b% x
  17. 7 w. ~  T; C. V8 N# G. O
  18. #ifdef _DEBUG
    * i. I+ T8 {3 ?3 q( a6 p
  19. #define new DEBUG_NEW
    4 F! U) }2 i! a
  20. #undef THIS_FILE
    4 H( }8 o+ y- @
  21. static char THIS_FILE[] = __FILE__;
    ' \( @! w* l+ m/ |
  22. #endif) h& j7 [( b0 q- J, j+ e# h
  23. #include "SkinResDef.h"
    9 k- O. i; ?. X  N" y- u) B: {
  24. #include "ChangeBG.h"
    " Y4 S5 `! Y2 e6 o$ S+ a  Y
  25. #include "AFXINET.H"
    4 q1 J3 Q* A% e( }9 D+ y+ D  [1 l8 G
  26. 7 {: r6 \8 t2 C% b& |
  27. #define TRADITIONAL_CHINESE 0
    , _/ z0 e2 Z$ |9 o! w
  28. #define SIMPLIFY_CHINESE 1" `2 p8 N  W* B  I# V
  29. #define ENGLISH 2
    ' |6 d3 x9 p# D% c' \0 d
  30. int m_iLanguage = ENGLISH;" I6 z9 V1 Z0 O* v2 w  Z
  31. /////////////////////////////////////////////////////////////////////////////
    4 u% k, e3 v( f1 ^3 `, y8 a) n: b, Z
  32. // CRevAppApp
    * C: @; d8 [% J& g$ @
  33. - Y" x7 c2 l# Q1 o( x: d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ {$ q' F3 m% [" M# u) O1 c
  35.         //{{AFX_MSG_MAP(CRevAppApp)3 N: H! F2 S7 I* o5 A( l# A9 `% ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 o1 ]2 j: Y8 h' z7 }$ d' f) U+ x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 m- l) t" q. O" P5 G
  38.         //}}AFX_MSG
    % }, H! N3 t" M) P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) n2 u) n+ X1 l- g
  40. END_MESSAGE_MAP()5 a" s; r# _* U2 G# L
  41. 6 k" y0 C8 [# S% L( j7 x- p
  42. /////////////////////////////////////////////////////////////////////////////. I% o$ J! L) R7 M/ N. T9 ]( I& s
  43. // CRevAppApp construction
    * i1 I  r9 f7 ]- v- \

  44. ! ?( z3 ?. ?$ L+ _4 S. T( \
  45. CRevAppApp::CRevAppApp(), D# T% [4 X6 Q- `/ q6 b  n# e
  46. {
    1 a% B+ w* v8 _
  47.         // TODO: add construction code here,
    - ^5 H! Y* b8 b% ?6 p+ q- E& a+ e
  48.         // Place all significant initialization in InitInstance
    2 n5 z* V& f; B9 K5 z7 Z9 H
  49.   bDisplayIsBig5=FALSE;$ ?, @  O2 I" e; R
  50.   bRestartUpdater=FALSE;
    / B$ R7 b' D9 l! v( `
  51.   bFinishUpdated=FALSE;0 G4 C  i4 [. I
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / S" g0 p3 G% k+ z! _: Q2 q- B
  53.   InitChangeDataBig52GBKS();; e1 I# K1 z2 V0 g' l# A) w
  54.   InitChangeDataGBKS2Big5();
    ; a; U5 s  ?6 Q  b) I+ R
  55.         //
    8 @- \2 n4 V2 S) N0 Z8 }4 D. d( A
  56.         bClickRunExe = FALSE;' v; ]% z5 B+ R, p3 y) z7 z
  57.         //
    ) `) _% d3 a: o+ t3 M0 i) `" {
  58. }
    ( D9 c1 q$ s, g* `' \" I7 z

  59. % {8 [0 [% \7 \( Q; d
  60. CRevAppApp::~CRevAppApp()
    6 m2 m* J- {+ F0 S* t9 v+ r
  61. {
    2 l* O+ L9 q8 @$ x" Z' V
  62.         // TODO: add construction code here,4 d4 E7 C- g* C
  63.         // Place all significant initialization in InitInstance1 o8 @* i+ k3 H* x; x) Y8 |& u* ^
  64.   EndChangeData();
    2 x5 U8 ~3 |3 S) g7 M1 v1 v
  65. }- D, M/ E; K! |5 b! L9 d% i

  66. 3 r- M9 N9 \" X% }! w" N, ^8 @
  67. /////////////////////////////////////////////////////////////////////////////
    ! |7 n+ o( C" p+ [2 _1 r
  68. // The one and only CRevAppApp object1 t( A. n2 b- K! |/ I0 `3 j

  69. . z- e) k6 n( p7 g1 ?9 f
  70. CRevAppApp theApp;* k$ o; q8 g2 c( L
  71. 8 v% k8 {, ~( Y. ]# z) A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ) Y$ W, @, h: M3 V- U
  73. {; L, q1 |- b: o. n4 z2 J* A
  74.   int iEOF=0;# Y. N3 o7 p& a! z. y
  75.   char szTempName[MAX_PATH];
    9 v  Y( G; T9 ]% b' x
  76.   *szFileName=0;; [: R/ _7 u3 j6 d" ~) Y' F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & q5 o  O% h) n0 o9 A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " t2 E& v+ b; c# X1 U
  79.   {: N6 M7 ]7 A$ c& _
  80.     strcpy(szFileName,&szTempName[1]);9 T" p/ E& p& X& ]( ^1 J7 \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & F9 a2 N6 H  A/ g0 s& R8 f* y* R5 C0 j
  82.     {% I/ y6 [8 N' R. N& o3 U
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / s* c) L. u" E$ ?. _
  84.       strcat(szFileName," ");3 D5 v8 E' a! l: [3 ?
  85.       strcat(szFileName,szTempName);
    + F: X: E6 y6 Z
  86.     }$ n5 |7 S8 g6 B4 N4 q
  87.     if(strlen(szFileName)>=1); i8 P$ f5 j1 U% |- I' Y
  88.     {
    1 P8 E+ _$ Q! E! E4 d1 U
  89.       szFileName[strlen(szFileName)-1]=0;
    # t7 [( X* J) E* @, B4 A
  90.     }
    : x- ~, V+ t: H( L9 P; n$ a4 B
  91.   }
    ( [3 c. N8 o) \, }1 j0 b3 O
  92.   return szFileName;$ V6 B3 i8 e0 r9 ^- w  M6 K+ @
  93. }
    9 Z! |7 m4 c; d' O; c
  94. ) f" `( e: [  x/ Y- ^9 b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - }) c$ K1 A- E2 F
  96. {$ g! H# A& M8 F. ^. e" P4 M
  97.   FILE *fp;
    ' ]* f7 o* ~# y; c6 f
  98.   char *key=NULL;8 T2 p- Y+ _5 Q* W
  99.   char version[MAX_PATH];# I; w# M) g( f0 C
  100.   LPUPDATEFILE file,olds;3 ?6 o1 M. ^: P  Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ X. }' l5 Z4 A, D8 a5 i8 z

  102. 9 W6 |; u$ a* @% h0 O- ~+ M% \
  103.   UpdateList.clear();
    & B# G" o* ]' K
  104.   UpdateFile.clear();4 S/ z) I' T0 W; f
  105.   if(GetFileAttributes(filename)==-1) return false;
    : d0 I8 i5 j" w7 x) m% d: B, X
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 |! k" |" |. |/ S  z
  107.   fscanf(fp,"%s",version);! W! @, S# m) Z9 \8 Y1 n$ B+ d
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 D6 F" W5 X# {: g" I0 D
  109.   while(fscanf(fp,"%s",version)!=EOF)" |4 m2 O3 ]  N( v3 g* X7 i" ^
  110.   {
    . W" {3 p. ^. K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ G) ]8 Z5 z; D! T: K
  112.     fscanf(fp,"%s",file->path);  A& K% h! [* o' q, H" `$ h
  113.     ReadFileNames(fp,file->file);
    + P3 k: Q: n" O7 y
  114.     strcpy(file->full,".");
    5 T: k, F( C+ R5 L3 A5 G) }
  115.     strcat(file->full,file->path);
    % c: H9 @3 l1 e$ T/ p) {9 g3 I$ C
  116.     strcat(file->full,file->file);
    0 Z$ x# d9 \$ ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 y( p# [$ k/ Z! ~
  118.     {- c: M6 J, B+ b2 c$ ]9 z% Z! Y
  119.       file->vers=(float)atof(version);3 Y* F, k+ J; m) g, S6 ]. D+ d
  120.       UpdateList.push_back(file->full);; h9 z6 H+ n2 F7 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 t6 g! _' [4 G6 C8 K+ |
  122.     }
    $ S$ }$ u- O1 a& T5 i9 q4 y
  123.     else
    5 c% H* B- Z2 ~4 K) }
  124.     {  O* M# B9 l  T# B, ?4 c0 B! z9 V
  125.       olds=(*p).second;# @3 U2 p% L5 T% ~' S' a2 H+ m
  126.       if(olds->vers<(float)atof(version))
    ; u2 y' s5 }: u3 ]7 r% A
  127.       {7 r% j5 H  J3 a3 w
  128.         olds->vers=(float)atof(version);9 k4 [, y9 M3 X1 C  b' B
  129.       }' V0 V8 X9 t0 ~$ G; h" e" ^
  130.       free(file);$ u7 |2 q6 a: G' E
  131.     }* H, \& \) z% f4 O3 C5 ]
  132.   }- F3 n! _; z; r8 e' V; _
  133.   fclose(fp);2 x( O. N. U" {6 Z
  134.   return true;, E. t) b- ?; ?2 H5 w. T
  135. }
    & U( V+ T. u0 V+ }3 J9 q

  136. - j9 X+ V, C) P( V' h1 n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : W) R' _; r8 {! \6 S5 U; |
  138. {
      Z% p- L! L* V; n7 R
  139.   TCHAR  szFull[MAX_PATH];
    ) h! O% g5 h( j3 F7 Q1 N
  140.   TCHAR *token,*inter;* p2 K: g( j7 C" M0 K
  141.   *szPath=0;
    6 S1 @3 F, ~# M# V9 K! ~  Y; e
  142.   strcpy(szFull,szFullPath);
    : B, b6 s3 m  ?4 G  ]( o. O
  143.   token=strtok(szFull,"\\/");0 ^+ Q# o9 _7 ?# E4 l! c; U
  144.   inter=token;" T% b2 Y9 P" z8 b. x7 Z
  145.   while(token=strtok(NULL,"\\/"))' A1 D6 i& Q- h0 W5 r' S, _
  146.   {
    6 z( Q) V/ B# q2 k  K4 `
  147.     strcat(szPath,inter);
    ' z5 I" A$ T- t8 \  C) K
  148.     strcat(szPath,"\");
    1 B5 W8 o  |' p' O' ^  h2 }
  149.     inter=token;0 l; B4 a* ?/ s& t
  150.   }
    ) o6 }, u) k+ X0 V
  151.   return strlen(szPath);( J* W# o. W+ ~" C: Y  Z/ l
  152. }
    + S3 T7 ]5 y6 Q8 Q6 B
  153. 8 P, ?' [+ R4 \6 {! {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! v1 T/ N3 z' M$ k5 _- O* k9 W
  155. {6 C! e' h' T! E. ~3 H( p
  156.   DWORD attrib=GetFileAttributes(Target);, @: [2 p' c6 E- k. y" T
  157.   if(attrib!=-1)
    : r8 Z7 }+ i& |8 d3 J/ ^8 Q! h
  158.   {1 u3 m9 P4 t0 \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' _2 L: B" {, R
  160.     {+ C3 K+ y$ s% i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 P7 C" P8 ^, E/ K# m2 g
  162.       SetFileAttributes(Target,attrib);
      N5 g5 o7 s( S
  163.     }
    % r1 Y) k+ L4 ]" c9 N
  164.   }+ L: `8 l8 ^7 Z& y5 J3 a/ a9 z
  165.   CopyFile(Source,Target,Erase);
    3 L7 ?; }! ?5 Z2 C: ?# k
  166. }" _; m; G3 R: w$ }4 P" t7 F

  167. - ?& S. k+ O/ q) Q( L0 |2 a! o; v# J
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" a3 a" W( |+ n4 Z; U9 ]$ K/ Y
  169. {- n; m1 @6 r9 [  @& `+ ]
  170.      FILE *fp;
    " O$ T. ]5 f) C2 s
  171.      char  szBuffer[8192];( x' b# q# k$ s0 o
  172.   va_list  argptr;9 d% l! x, Y% `  v' n" i& a
  173. 8 O+ h& P3 X$ Z5 r
  174.         va_start(argptr,message);; E! p9 n: [4 i, ?6 {+ y
  175.         vsprintf(szBuffer,message,argptr);
    2 [+ k9 ^& y6 @- T4 Z8 ]
  176.         va_end(argptr);: A3 f) Z% D9 b/ N9 T
  177.   fp=fopen(FileName,"a");
    " d- X* @1 E0 J+ F; I
  178.   if(fp)* h2 K+ x4 o3 Q% [* `; I+ ~
  179.   {
    % z  F) S( \! s, G! L/ Z5 M% V! i  I. {6 H
  180.     fprintf(fp,szBuffer);5 ~) ~' I5 k! h! Q
  181.     fclose(fp);
    ( M4 _, ]- Z# [2 F+ s1 K
  182.           _flushall();
    : V( e# P0 Y) P% J6 `
  183.   }7 U  u. v% \4 \1 w$ f, k% ~+ P! F: D; a
  184. }
    3 X7 u0 c1 }9 A

  185. * q% P7 t" n: o9 u; T
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! w+ G9 R% q, R' Z- b/ g" l. Y
  187. {# Q$ t- t$ ]; K  ?5 ~4 r! l8 A
  188.      FILE *fp;9 @* V- L* y) p* `% @6 l/ O
  189.     DWORD  attrib;6 a9 D! w8 {) Y2 O  q& U4 F* T
  190.   attrib=GetFileAttributes(FileName);5 ?( k( h, P, Z$ ^0 u$ c
  191.   if(attrib!=-1)
    4 Q3 e6 G% S( a# y2 ]6 g0 l
  192.   {9 o& _; U; v4 }6 Q  y0 Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);* W3 T# y& b6 `" \
  194.     if(!SetFileAttributes(FileName,attrib))
    7 O( I" R" t& C$ ^0 [6 Z+ b
  195.     {- f9 |) p# P; h7 ?' G( a( F1 B
  196.       return FALSE;
    & d+ S1 s; c0 f: ]' @
  197.     }% L1 h& z$ ~" Q) j, X$ `; H3 Y
  198.   }) }! W4 w# n( J- h
  199.   fp=fopen(FileName,"wb");
    3 c8 ]1 {; B2 Y- Q, L( \
  200.   if(fp)
    3 ]. o( w' J8 [5 |) r1 ?8 ~" A. C
  201.   {5 H: b1 t' F, T; P
  202.     fclose(fp);
    5 ^: ?5 W& r4 O' o) M' r
  203.   }" h! r$ T0 }* o' K
  204.   return TRUE;
    ; l, \% c$ f5 A% B
  205. }
    ' i* s1 h' u" \7 ?7 _$ t2 p
  206. - h. E' F9 }. U5 F# M3 o1 g' N1 J0 K1 f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 i! r, Y6 t& i# h  F
  208. {
    . h% ]; [, [! ~+ `' X1 P: q
  209.   char filename[MAX_PATH];) n- v" g; O! x2 k1 t
  210.   LPUPDATEFILE file,olds;6 P3 m0 V9 d' N) j+ T' L$ C
  211.   std::map<int,CString>::iterator i;+ P$ W, ~. g  m4 b! B1 }" f% F! B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    : Z9 i3 S" p3 K! u! ]5 c: T6 o* |1 ]0 a
  213.   std::list<CString>::iterator l;
    5 z: r- _& w6 g$ ~' e

  214. 7 h: z2 W/ D1 n! a6 s. J6 c
  215.   if(bFirstUpdate)
    % b( Q! f8 M; u# L+ [
  216.   {
    # M8 J  X8 R6 h& I! X
  217.     dwCurrFile=0;1 K# p! y5 k3 x  {% T! J8 S
  218.     bFirstUpdate=FALSE;
    5 `/ C2 S$ N: l4 @+ f: Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). T  Z: ]7 v! K9 O. E
  220.     {3 X& {, ?2 P- {+ A. D; F: I
  221.       dwTotalFiles=UpdateLocal.size();
    9 n0 M+ j6 d3 A4 c" Q7 r, J
  222.       dwDownLoaded=0;
    * w9 Q" m! T# n
  223.       bSilentStep=FALSE;
    ( ?( g& l% ^3 S
  224.       bCompressed=TRUE;# ?4 w) C( f9 V: u8 Y2 o( K
  225.       strExtLocal.Empty();1 A1 \4 a2 W7 E4 ?# O4 {
  226.       strFullName=(*i).second;* J! i8 H( g. f3 w, O9 l( e
  227.       dwProgramState=AP_CONNECT;
    7 T3 ]% C( y  w" Y4 Q
  228.       return TRUE;
    . b7 k$ e' x0 c8 [3 V
  229.     }2 u  z- Y1 H# Q% q# G" v
  230.   }' e( B; d( e2 j8 s1 ]% C/ r
  231.   else if(bRestartUpdater==FALSE)
    : P4 m6 j3 |& N9 a
  232.   {
    0 y7 |$ O4 i1 H$ o: t0 i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 E, ^0 q$ s% B# z8 B
  234.     {
    ' L) V$ {  w8 a8 t* A, X3 d& {
  235.       file=(*p).second;
    , L8 f/ M% h( C# s4 s  ~& y4 P3 c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 }$ Y; \7 [$ T
  237.       {& A! b0 w8 M1 U2 h$ B: q
  238.         olds=(*p).second;
    , {; b! ]. ?: F8 ]" X' i
  239.         olds->vers=file->vers;$ [$ v- a! b' U6 j5 }, T
  240.       }
    + _0 N9 _5 @% @* \  ]: _
  241.       else
      l2 A$ r% x, o1 B
  242.       {5 i; }7 e% b/ {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) V4 e* o3 E$ C0 e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , n* G; s6 T' b6 l# _7 M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" d. Z  K, V% ~
  246.       }3 a" I4 i5 v3 Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ f5 O9 S, R8 j2 r  `3 V6 B
  248.       sprintf(filename,"(%s)",file->file);
    - r) j/ o0 @# W. m4 r  f" L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 Z4 Y1 ]4 x0 Q& Q* G+ l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. K2 u- I9 ~9 O1 `6 ?
  251.     }! x  j1 I1 ?9 `! x
  252.     dwCurrFile++;' y! H  R: ~; D# B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% a6 n$ Z& S* P$ X. }" b" t: k
  254.     {2 d1 ]( a; ~) A& Y: u
  255.       bSilentStep=FALSE;
    8 ~% F# z9 A" T5 Z
  256.       bCompressed=TRUE;
    $ I: S7 Y# }: F7 [7 G8 b# E& Z
  257.       strExtLocal.Empty();) ]) n0 j  j3 H
  258.       strFullName=(*i).second;
    6 }  a, f% `" ]: z7 |
  259.       dwProgramState=AP_CONNECT;8 h) V- k7 @/ d: G; o8 C
  260.       return TRUE;
    8 P1 C6 m7 g! N5 p
  261.     }" g9 T* ~0 ]  X* k
  262.     if(!bRestartUpdater)
    0 G: N0 a! \4 y$ F& T$ p# t6 I; @
  263.     {) w& ^9 i, b5 F' o4 U
  264.       int iCurrSize,iFileSize;
    ( W$ D  [) g+ O+ m$ Q$ v8 ~" V: U
  265.       iCurrSize=0;
    % }/ B* k$ O& m$ V& v+ Z; a
  266.       iFileSize=UpdateList2.size();
    & _) c8 n& ]8 C/ b: |1 m7 ~3 R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) M3 ^( |7 S' n! ^1 ]9 \
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ) |  D( O* L( c& B" x  t! t+ q- Q( H5 ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. p( T% U+ ]5 B8 B- p
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' R0 O; J8 F. ]* x& h+ {: J5 s
  271.       Fclearf(".\\update.dat");  @2 G' i$ z' Q  c0 ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 E+ k" F6 C* o' |+ ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' @1 z) }' S/ ~2 F; I4 m% g" \
  274.       {
    # R4 M7 Q: v$ k% o  p" x
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 q; V9 Q/ n- {
  276.         {
    # j; L5 R6 Y) W8 \( m- ?; m* s
  277.           file=(*p).second;
    9 G* R& l; S7 o% {8 Z2 q
  278.           sprintf(filename,"(%s)",file->file);
    * i5 ]1 P/ D$ x; z" x6 ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* F) ]8 O2 B2 V$ E# Y7 l' B
  280.           iCurrSize++;
    6 H3 G' \  _& g# C" A( h" Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));. d! A: S* ~8 [+ q# A, r: i8 A6 J
  282.         }" x1 v/ ?7 v- A: t) R
  283.       }# J4 m' j& M: l. _# _
  284.       unlink(".\\update.txt");
    5 J6 n' Z% E( [  S3 u5 q
  285.       unlink(".\\update.tmp");
    ' h- y8 c# R9 g4 B* I  N
  286.       Fclearf(".\\checkversion.dat");% m3 F/ [# ^5 h; G0 @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);2 {! d; e# _+ {% }' n( a5 H. @+ F2 b
  288.       if(UpdateLocal.size())
    5 {/ N: k+ O- W. M9 C* |' Y' l- {
  289.       {
    , U1 g5 j  q/ g  O* v! r, ?$ Q8 |
  290.         UpdateLocal.clear();
    4 b' c) F) ]8 D" X8 D3 L2 }' F
  291.       }
    % E7 i2 @1 s$ d& e' G1 z3 _* ?
  292.       if(UpdateFile3.size())( t4 a' G6 x8 [0 [3 ^
  293.       {
    # V  D# f" p& i8 J- {# L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# W4 m3 h2 f; m! E* D" f# ^! ?* ?
  295.         {
    ( V8 v9 @1 E) ~8 K; Q9 @
  296.           file=(*p).second;
    & K" g3 X. @4 F
  297.           free(file);) u' R  t2 u6 S- Z
  298.         }2 i+ Y8 a* j( G7 p3 n, C! F
  299.         UpdateFile3.clear();$ @( V- E+ [' z9 P4 D
  300.         UpdateList3.clear();
    0 l: J: e/ i6 j1 m
  301.       }
    & G$ z0 |3 J# l7 Q
  302.       if(UpdateFile2.size())
    : q4 d5 P2 N/ Z( l. I
  303.       {6 U, W1 y# g: G1 A3 V
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 C; N0 a2 k0 n+ _  U  {  T; E3 ]) {
  305.         {) K( J6 g1 y  e$ I' U
  306.           file=(*p).second;
    4 r2 c( K  p+ D4 H7 U6 G
  307.           free(file);
    * F: h' f- d' |) @
  308.         }
    : ?! x8 ~- `' k% C
  309.         UpdateFile2.clear();) e% K$ W9 s0 f  T
  310.         UpdateList2.clear();
    - _/ I$ V1 s: h9 H+ n/ m
  311.       }
    : G# p4 H5 ^) u7 ~! e# X3 x
  312.       if(UpdateFile1.size())1 f: q0 v+ f! T' v
  313.       {9 q3 Z* r; ]6 B* i9 L
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# J6 l; L3 }% |$ s% g5 W5 `
  315.         {- B' k+ s, C$ w5 k& i. A7 i4 m% y% N
  316.           file=(*p).second;# R- F4 G6 y) A
  317.           free(file);& v) L+ z1 Z7 x) z* h  D5 N( p
  318.         }
      B) _6 g. a/ Q9 s
  319.         UpdateFile1.clear();8 _6 x/ I. I- n7 Q
  320.         UpdateList1.clear();* v4 ~' t- B1 \( ~
  321.       }
    , L' \# P( z2 e2 ]* P* c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. v  T2 a  l5 T" z% V  y+ a: T
  323.     }, |+ O! R8 R/ e' J9 S" a
  324.   }
    + ?; j" h, f7 P2 ~  @3 `3 Z
  325.   return FALSE;
    1 f( o4 S  H' c9 |8 d% q
  326. }
    & S1 ^# p+ l0 R. @8 Z/ I

  327. . u$ n1 {& @( T1 p
  328. void CRevAppApp::ClearAll(void)
    + y; K6 k/ G6 _- ?% E: a; ^8 C
  329. {
    : o( r: L5 ]  M6 g: A7 l5 c7 ^! F
  330.   LPUPDATEFILE file;% K0 G: s8 o# S0 n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) c+ j8 }+ h  A+ D7 w% r
  332. 2 @/ e, P2 i. P
  333.   if(UpdateLocal.size())
    9 I' [2 e0 h( \
  334.   {6 t9 D( |; z, R/ C: E4 \. f
  335.     UpdateLocal.clear();
    / W9 l- z& f* q! P7 f, ]
  336.   }, h# Q- }+ }6 @' {; F4 G& f+ K/ o$ i
  337.   if(UpdateFile3.size())$ k- X, ~# Q6 b- t1 G4 ~  f
  338.   {3 l  W: l. H; q/ o/ F
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% s7 W  |  d+ Z0 @
  340.     {
    ! G) u5 t  _# x" m) E/ h0 B
  341.       file=(*p).second;8 h8 s6 [: x5 k2 T& C# x' ?$ m6 Z
  342.       free(file);+ w" _& c6 Z6 p# |
  343.     }
    5 W$ R1 P+ a( S9 P/ E+ P
  344.     UpdateFile3.clear();
    : {! h7 r& q8 o$ s! T3 e: y, f
  345.     UpdateList3.clear();% R) P% i& ^, f7 w" k2 Q
  346.   }1 o$ P( b/ L0 G+ R$ }  \
  347.   if(UpdateFile2.size())
    : g' l8 ^( E* |" i5 z
  348.   {5 O" w$ U1 c7 E. Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . A+ T# p5 j  O! S1 X
  350.     {
    . N. U% \% N- G
  351.       file=(*p).second;8 B! C0 P% \$ K* M, p; |' T2 v
  352.       free(file);) a3 L" ^1 `0 R6 x7 D8 T( M
  353.     }
    ) m7 i/ D( C: {% Z0 ~& F
  354.     UpdateFile2.clear();. o$ J% [/ o& J- n% s
  355.     UpdateList2.clear();! L2 e; p0 F$ T; Q1 A
  356.   }) Z8 P& C) N0 }% d4 l9 Z& \8 f
  357.   if(UpdateFile1.size())# y  U# n! v8 K0 I& O
  358.   {5 z# Z! S) A6 C8 f/ M$ S3 s- f2 M1 T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ G" b2 [3 M9 C0 Y
  360.     {
    $ D) [6 [8 Z& O. ?4 _
  361.       file=(*p).second;( k4 ^0 g% g; L! ~+ M2 p
  362.       free(file);8 M) a+ R$ f$ U
  363.     }+ X0 ^& z4 C/ e' W+ b- k% i
  364.     UpdateFile1.clear();9 B; w8 G  W9 S' Y! a- L
  365.     UpdateList1.clear();: c) D  x$ L% X9 D; S0 \) M! d
  366.   }7 f. P' b9 m* P/ d2 f% T
  367. }  ! Z6 ?( V8 U3 a& A
  368.   
    : x6 I  r9 x( @2 W6 I0 B. s# s' O* ~( O
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 ?; g3 G$ S7 e6 C
  370. {# s" W6 o1 i% N6 r+ u
  371.   int c;* k, O/ X  K% d  n
  372.   LPUPDATEFILE file1,file2;! o/ ^& O2 Q2 W# T1 d$ ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ j; m: z) b! |
  374.   std::list<CString>::iterator l;% `' e6 {% D9 @: C! L# c
  375. + `+ G. ?1 o5 `& E. S2 B8 f7 ^8 r
  376.   UpdateLocal.clear();
    % K$ C! a) U3 C0 T! G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' L8 N9 ~3 z4 _! R( l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);) a0 U0 F+ @- K1 u* d$ O# A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 x, O& u/ r5 S+ c2 w& F* g9 v# h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" B! l$ w$ _8 T( q1 O) E5 V/ d
  381.   if(UpdateFile3.size())
    * C/ D- d6 k/ m' M3 L
  382.   {: ~. J4 b$ z7 U) ]% q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / {( o4 X) P; C, A
  384.     {
    : \( S0 i2 V, _, {0 s8 y
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; N+ Z: n$ y. a: h+ Z' s, {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ C8 h( ^+ R* I% A! k4 T+ G
  387.       {( F% _0 v& m5 g4 {. e0 j0 _
  388.         file1=(LPUPDATEFILE)(*p).second;
    " V8 |4 L' h: d  d+ x$ r; V' i
  389.         file1->vers=file2->vers;% U. g$ P* Q0 I2 }9 ~% p, G
  390.       }8 k' h8 }* L" U* Y
  391.       else
    7 o3 M  P4 K, o5 x6 q2 R8 V
  392.       {
    ' ]  \- z! @) x. I0 S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 f/ Z' E8 u2 U3 b! S) q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 D& f$ I/ V$ Z- P" X; {: [2 I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 a* W' }) `* q; i% e' ?
  396.       }4 s, \* l9 Y, e- J  A
  397.     }2 f) N7 n/ |5 D$ V& B8 O% S5 W5 s
  398.   }
    % ?! S5 j; v! M. b2 y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 h5 G7 N" Y# d: Q4 S$ v
  400.   {
    8 b3 X. B, {( i4 y7 d. L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); C" Q# F& o- T
  402.     {
    ' l' z3 G# r! |* \+ {" d8 y
  403.       file2=(LPUPDATEFILE)(*i).second;6 l3 w; a) O# N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# Z) C7 ^4 A& s9 m+ r
  405.       {$ ]/ w( |+ }! I2 P; P
  406.         file1=(LPUPDATEFILE)(*p).second;
    8 X6 O1 P3 ~0 Z
  407.         if(file1->vers!=file2->vers): z9 F; l9 k6 l: |# A: t
  408.         {
    , y) r7 r: `2 I1 W; _4 n. X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( [) q3 B# H' W0 E% F
  410.           c++;
    $ k! d4 s! [2 `' w1 e
  411.         }5 y: |4 `2 i2 p3 G! x
  412.       }
    8 N; }! K2 X' f8 K1 v
  413.       else9 j* o2 L* g, i) E. j* }- v' ^* @& d4 O
  414.       {
    . @; N9 r2 S+ V0 y0 _4 o5 u/ g; p2 c, |7 g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 y: `0 ]' H( Y
  416.         c++;
    ( X: u0 N( |  V1 x% \2 i
  417.       }4 I! |$ W* H8 Y2 S9 G8 i4 z# `
  418.     }; l7 @9 c! i/ b7 g& Y' t
  419.   }. j; h9 r$ M0 {2 \7 }( x. d- b/ B
  420.   unlink(".\\DownLoad\\update.txt");
    5 L0 Q2 c9 |$ h0 ~* K. N
  421.   if(UpdateLocal.size()) return TRUE;
    3 j# X! w7 e' z' Q
  422.   else                   return FALSE;- Q4 k. k* j% T. o( B* l2 a* c, Z
  423. }: l0 V# O. ~8 u- @" V- P

  424. " ]3 N1 i! A* ^8 q7 L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ _& u* [' ~1 m4 r4 H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 Y0 p8 _8 I: J- ^6 i9 |4 }

  427. ! s" l3 v1 L  T

  428. 4 X7 B; B7 ^2 q8 i5 D

  429. ) ]2 e; A; H' R7 n4 i$ X
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; r4 [" }9 r& s
  431. {
      i- i" ~3 o# `1 D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 r' s4 R: f, y' F. A* G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- Q& A! }9 u' }7 b& \; S
  434.   {7 ^% D, n: c, E3 n- W5 q
  435.     char szLanguage[50];. a9 |* p0 Y* U9 b5 Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; [  ?, q- c& G$ A* k5 V: L' s9 k2 q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 h! w! ^, z/ e0 d2 X* {
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! x# P& n1 u- ]7 M
  439.     else                                   m_iLanguage=ENGLISH;
    ! |9 K, y3 E* t9 ^; s, b+ s
  440.     char szRegister[100];
    % Y6 I4 {$ u2 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 i% S0 |) w/ Z* Y: U
  442.     strRegsName=szRegister;; A  ~* A/ n' u/ g' I  g
  443.     char szPatchURL[100];/ C; {1 v0 T7 N  D1 S* H/ p6 G4 z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ E$ O: u7 ]' ~2 i8 x& X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  U: p# {+ f$ u# }: a
  446.   }
    . L$ n# k6 J$ i. N. F" b8 _. F
  447.   else
    ! ?8 g. ?- y5 _0 h; t% l8 B$ l
  448.   {
    1 \8 t5 o; Y: n1 g9 Z4 s$ t( Z8 Q+ {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      m. h7 E& e6 H/ Z  H* I
  450.     strRegsName=DEFAULT_REG_URL;- I' d  S) {& r. S# L
  451.   }
    # e; P+ J! a  I7 O- [
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ Y! l; ?/ C! g$ v; H. y& d
  453.   {
    5 s0 [! b, i0 c2 v$ _
  454.     char szIP[50];
    6 `. s" m# b6 a; L! q; p% W" B) `
  455.     char szDIR[300];
    / k5 a' d& i3 b& t* J
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ! k6 M7 ?" k; t* \# j- ?
  457.     {
      Q6 j& b) c& a- v7 _4 Y$ K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , Z$ D2 ?# M8 S3 t0 t. W! f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: s! [  C, _& b# M4 |
  460.       strHostName=szIP;! x2 ?6 n* G, g, V$ @( G( L5 \
  461.       strHostPath.Format("/%s",szDIR);+ P* V; G( o; `7 w8 Z
  462.     }! g0 n' n% y5 W1 R; |! b2 _3 D, E
  463.     else
    ! Q: Z5 L! I3 p+ i; g7 s, X- p# d
  464.     {
    2 }, C- x0 b; {/ s) v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 T3 j: t2 M. R
  466.       {
      r1 `' a6 V7 K" z
  467.         char szLanguage[50];& f0 y' |" v2 x, g6 k$ O, Z# |8 v: L2 O% p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * b' f4 E0 s. M6 k" ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 _, R4 E& g9 E$ `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' d" P4 Y- }1 S% b" X6 G9 V1 l
  471.         else                                   m_iLanguage=ENGLISH;, c  D% I7 y; o) R! {
  472.         char szRegister[100];
    * |( ?- J. u0 v$ S( P# H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. j4 v* Y1 Y' J5 _1 ?$ C$ c! u- v
  474.         strRegsName=szRegister;/ g" z- i4 J$ l
  475.         char szPatchURL[100];
    5 B3 Q! |6 q0 }) U% p; k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! `; X. c: q, G7 g& i! O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( N5 w7 h/ R+ Z& K. w, T6 n3 b" q
  478.       }* h& ~( W! x2 G7 V/ g0 X
  479.       else% s* E" L# Y( P' W/ W5 s( l
  480.       {
    + Y7 q3 m" E: W' V  Y9 O% l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 k& K. i! ?- b$ S, I: y) `
  482.         strRegsName=DEFAULT_REG_URL;# \! m) U9 B* S# R9 f, P- Z* f
  483.       }# k, z# N  F4 C
  484.     }
    % L9 c0 Y2 r8 w0 V. G
  485.   }1 P8 Y2 Q4 D7 G' ?& D( g( a# O
  486.   return true;! {* {# W* r2 `+ m' a# F
  487. }) S+ N" y/ i! \, g

  488. 7 e- R- s: v3 o- T! q! D
  489. #include ".\ZLib\unzip.h"
    6 ~9 f% @$ W7 x7 D4 w5 C! Q7 P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& a  D5 f& y/ Z7 y, v
  491. /////////////////////////////////////////////////////////////////////////////
    ; N% ]4 c. @" a% E3 O8 T% u
  492. // CRevAppApp initialization3 q: [1 b3 ~% d  A( ^' w7 g
  493. 7 h$ H  A8 M% B$ t/ e
  494. BOOL CRevAppApp::InitInstance()4 w8 t( q. i* a  S+ u
  495. {
    + j& e5 _% e3 I$ O2 ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    * `* B+ r7 [2 S% M$ ]1 Y. G; n, o
  497. 8 A) k# T, O7 G- \+ j* d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 |5 X* x  j5 u7 v5 L, I
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), ~# A; j4 `5 M" b- [+ f
  500.   {! d4 x3 }! z' x+ s: T; ^4 g5 l: I/ L
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% I/ O, _* q2 ?5 R5 L+ T
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    : _  T6 e; @5 l4 H6 M8 L% r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 H9 V' ]1 Z2 m! ]3 D
  504.     {
    ( x0 {' u/ b* |' ^) \
  505.       strcpy(szPath,szPathTarget);" W3 ]8 Z* S7 `" E
  506.       SetCurrentDirectory(szPath);5 v' T# G0 N1 N' l, T$ q3 _
  507.     }
    4 r$ c& N$ R: {: a7 P" w; m6 }
  508.   }
    - Y* U: {) a4 b
  509. #ifdef _DEBUG
    9 j" T, C( F2 ^, ^% P- R4 V0 F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% N; `6 G+ l2 R+ D2 L  U9 F# D
  511. #else
    & D& C! ^! v- O$ g: z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & ^2 E3 y0 i( t* r
  513. #endif
    , x( K* ?! _/ Z; t  _' I  j! F, s' k2 c
  514.   {5 G; G& Z3 b* Q; c  A3 S3 S4 K
  515.     char tempFileName[MAX_PATH];, p( z) x7 ~, Q$ Y
  516.     strcpy(tempFileName,szPathSource);
    . _& l# p8 @6 W, `2 U2 [9 R# d
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 i% A2 a& w: g1 Q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; R4 y, E/ K  E  ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' p& g+ Z( a3 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 Y7 S5 Z$ J. N0 \1 b( ]
  521.     return TRUE;
    ! ^5 j: x* y- w& X
  522.   }+ ]0 U& H" }' s
  523.   // Nuke 0118: Delete run.exe% R9 I$ a# ^  y9 ]: \9 |# R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 o7 E0 [' a4 p* T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* I2 R5 x+ V8 j' i1 m% k0 l
  526.   if(!ReadCfgFile("Config.ini"))# j! Q5 f6 x% D( y& G- |/ z
  527.   {
    6 X% J" m6 U4 _$ q" t; v
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ D0 A! s$ n) Z, M3 Q8 W' r
  529.     return TRUE;) j( @9 s6 Z: s# B' i! o6 T. Z
  530.   }# @' U3 `# k3 C2 ~
  531.   HANDLE mutex;
    6 W& p: ?7 d% |6 m: z# @/ G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 A- F7 E. H% ?4 j
  533.   {
    1 _, `8 t& r5 ?7 {. Y
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    3 Y; d: o/ {3 `+ m
  535.     {$ i3 X+ `- C# f/ s" D" L; |# ^
  536.       CloseHandle(mutex);
    ' p) s- }" L) j6 ]9 L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* O4 n8 r; X' u  E
  538.       return TRUE;. K9 N: M9 H0 l- ?. ]4 t% v3 m
  539.     }  b* a7 P: C# J' O$ _4 i5 _7 C& `* \. c
  540.   }  
    3 Y3 _3 _3 z+ f1 G. c$ u
  541.   CloseHandle(mutex);
    8 |+ G; P, N7 S. T
  542. 8 q8 E2 d& h1 @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);, R3 D5 j5 q$ X5 ^4 o

  544. . H) s$ Y! O  ~8 u
  545.         AfxEnableControlContainer();
    ! M+ n/ p5 n7 i8 S2 Z

  546. 3 b$ z+ b) g  d$ K9 c( {" T
  547.   bCanUpdate=FALSE;, a6 U- j$ o9 j
  548.   dwStartUpSteps=1;, D& a% K5 ]4 u( y8 j( d& h( |4 s$ f! ~5 M
  549.   dwProgramState=AP_NOTHING;
    8 C( n& ^+ q* a( ?! |
  550. 1 u+ i+ D0 H+ P; a) j- t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    5 M$ p0 u* N1 E0 C  i5 L
  552.   q% J2 C8 b! c
  553.         // Standard initialization$ h. j! _! N, B% j
  554.         // If you are not using these features and wish to reduce the size
    3 k6 z% h2 z+ S7 ?* u# _3 u9 ~* h
  555.         //  of your final executable, you should remove from the following2 i4 O) N4 \0 @) d/ g. B
  556.         //  the specific initialization routines you do not need.) B8 x$ {5 a7 S- ]9 c0 w+ Z0 ]
  557. 9 D- I' Q: }$ ~) g( ]: F/ v5 t
  558. #ifdef _AFXDLL
    : n$ h- U" q9 ~- b! j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL) |4 x( L0 ~( a/ o* q7 d! W
  560. #else% y2 \# R5 M0 I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically" G% E1 I# \$ N9 e+ t% c% z' _  T1 b
  562. #endif/ s/ Y! i! b; d0 j. g% V

  563. 4 e; a. \* E9 F8 ]
  564.   dlg=new CRevAppDlg;" ^  f8 h. Z. k8 h( m2 `7 q( m
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! I. Y- a- |7 Y' o8 x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);: t, {3 [/ D0 j8 f  g/ K
  567.   m_pMainWnd=dlg;
    4 ]! _2 O3 f: T- l
  568. : r0 w2 Z0 O- e, c7 Z9 L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    " ~' f, M. i- n2 U7 w. Z* C
  570. : i$ G# k( {  s* U- \- O: s
  571. //  GdiplusStartupInput gdiplusStartupInput;7 Y+ x7 F( M( p7 z
  572. //  ULONG_PTR gdiplusToken;3 j1 h7 d9 X, u+ `6 L5 o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    0 Q: R8 z* j0 r5 Y  e
  574. 4 I* s* s; ?; K: m: Q: Q" V" A
  575. //        CRevAppDlg dlg;" Y' `+ ~. T9 Z) J( {+ O9 ]* H' ]
  576. //        int nResponse = dlg.DoModal();
    2 N% F% ?5 |( e$ T8 E$ P; y' `
  577. //        if (nResponse == IDOK)
    8 V3 n5 A$ o$ q
  578. //        {& K9 I, [1 b( p0 ~/ w5 }0 b; H
  579. //                // TODO: Place code here to handle when the dialog is
    ; N+ s8 {6 F2 f. F; w
  580. //                //  dismissed with OK5 Y/ [; V0 J4 a7 M/ F( [
  581. //        }' \1 r! y7 |0 I
  582. //        else if (nResponse == IDCANCEL)
    5 p6 Y! [: D. E/ S
  583. //        {" T6 Q2 {3 i6 k: b* k, V
  584. //                // TODO: Place code here to handle when the dialog is
    & e! B9 C* b  f& C
  585. //                //  dismissed with Cancel8 H0 l9 d# K% }% m& a
  586. //        }* `2 l( Z. G9 L/ A' |& G6 o
  587. 6 T% }1 b( c5 ^9 A8 e
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ w. [! W$ Y* G) p" Y
  589.         //  application, rather than start the application's message pump.1 z2 g/ y8 ?" K$ Y9 W$ j
  590.         return TRUE;- J$ Y% r4 }& b
  591. }3 L: y+ z1 _' |* y
  592. 6 z" D& a, n" C1 V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* v) h4 x+ j6 `* o( j
  594. {/ P4 \6 v: F3 y- x/ }4 g
  595.   int i;
    2 Z/ L8 u+ H3 a. N
  596.   char *szRet;' A, {& j1 Q5 {; j
  597. # H  ]* W6 ~# a3 |- l
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ z; Q9 g: k) [9 i7 K+ d3 l
  599.   if(sztoken)3 Q# S! P' m9 ]% u0 N- u5 F
  600.   {5 q0 t6 Q# A! N7 U" c. k5 a  f
  601.     szRet=&sztoken[itoken];- |% {0 R: z4 F+ V& h( `# P. e
  602.     while(sztoken[itoken])
    ( P, c4 X, z% [  u8 I1 I/ c
  603.     {
    3 X- B+ M. ^& {0 q
  604.       for(i=0;i<(int)strlen(token);i++)
    . n5 m4 a: E  C3 O* L8 O, L
  605.       {& s. O0 ]; `$ x: s# B/ z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    , Z& X; j& Y1 B* s
  607.         {
    4 ^* `2 f0 r* N0 h( J+ F# k2 N3 ?
  608.           sztoken[itoken++]=0;
    - m+ q6 ?% m" L" C0 r/ ?9 G
  609.           sztoken[itoken++]=0;
    $ D, f+ t. Q6 `) K/ T
  610.           return szRet;
    3 W& v: l7 ?- B# `! z5 G6 h6 t
  611.         }; j- V% _7 w+ F4 U6 G! F
  612.       }
    8 L' ^6 H' ^+ J( n5 x0 x
  613.       itoken++;
    1 O$ F" C  K/ d9 ^& }% O* y
  614.     }
    ' p# \# Q2 l  e( f. D
  615.   }- a( p5 r* j* Y
  616.   return NULL;- d" H* ^4 G" k$ V2 n2 a) J
  617. }3 e, H7 d& F) K2 k( ^( H- y- _9 F
  618. ! C0 p# ~( o1 o
  619. void ProcessProc(long Total,long Current)
    # T3 G% |0 ^& j  i
  620. {
    ; K$ A  \' n' v& r7 o
  621.         MSG msg;
    ( @5 A! m- B6 N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, L: Y, E+ a, s, S0 I' f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " S8 o$ F- L; t
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 J1 n! F7 s  D  b6 S+ b
  625.         {0 K9 w" e) f# C+ t4 `3 U
  626.                 if(!GetMessage(&msg,NULL,0,0))/ Y  O2 e1 d, ~' U  c% {; @  T& _
  627.                 {/ i* L; D4 U: q  g/ x2 ^9 G
  628.                         return;
    1 q: f/ R1 B& L6 r4 X0 {6 v9 L
  629.                 }/ U/ O0 }# H8 p8 b! q1 q- ?
  630.                 TranslateMessage(&msg);. D3 F1 p6 q( Q1 ^
  631.                 DispatchMessage(&msg);' J8 B% r+ A2 x* \
  632.         }        4 i6 Z! d, }* h3 j9 o. d1 Q
  633. }* `; z& U, G8 i5 L6 c; i# X. E
  634.   m/ }+ E! h4 ?  Z; Q$ v) r  C+ Y
  635. BOOL bFirstChar=TRUE;
    ; G2 A/ v* |3 I" |* E
  636. : v) J( `! O) j4 H" u0 N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# s7 {" F# h) h+ w
  638. {
    ) H* M# D/ ~& b9 Q  Y
  639.         // TODO: Add your specialized code here and/or call the base class
    - }/ S( k, r0 H# B' d2 o
  640.   switch(dwProgramState)9 p% v0 W6 c# U4 n
  641.   {
    3 G( g' _2 x$ h" [+ i: g% `1 U
  642.   case AP_NOTHING:3 }  n3 l1 @1 a
  643.     switch(dwStartUpSteps): R" O  m* e0 L7 B
  644.     {
    8 X8 A5 `7 B" Q5 U. h8 [3 M
  645.     case 1:0 ~7 U. L, t2 u* h( [. U$ {& a5 d
  646.       {
    ; U% q$ m& F/ p+ \. a4 Z
  647.         int i;9 G9 K- ~5 w& W( P7 M: o) N
  648.         CDC *pCDC=dlg->GetDC();
    + z7 T: y  ?( C5 h: Y! {
  649.         HDC hdcwnd=pCDC->m_hDC;* j% D2 E! [3 w3 D) o$ S
  650. //        Graphics graphics(hdcwnd);
    " d+ Z! R. `0 A  F; N( q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& g8 `6 X1 w( A
  652. //        INT iWidth=bitmap.GetWidth();& v- }& e( A2 A( ^
  653. //        INT iHeight=bitmap.GetHeight();" R8 J$ `& b- Q4 [1 ?1 I* P4 a
  654. //        Color color,colorTemp;+ E  g% w, p1 H: N+ m+ p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 U& u( z; F: n( O7 y/ _# o
  656. //        {0 D% q) C, K7 B- Y/ o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 {4 W# }- y) a5 |$ }. h
  658. //          {& V* A0 g# M2 P$ }% L3 z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: ~& f0 e9 z/ b+ |4 D
  660. //            colorTemp.SetValue(color.MakeARGB(
      a, S9 q8 r5 X5 F: ^. w% T
  661. //              (BYTE)(255*iColumn/iWidth),
    ( j; A8 J, v- j5 i: U: s
  662. //              color.GetRed(),0 l) Z& }, e; @: Q$ R! D6 I
  663. //              color.GetGreen(),) J+ t2 B6 N* N, k- }% i
  664. //              color.GetBlue()));' |5 o$ E9 C) O/ q" [9 `) o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 y( E2 u- \7 W: N8 E, |7 z
  666. //          }) s2 @! E3 w* \4 }
  667. //        }) e3 B) \3 W9 ?$ d
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" z+ v* k3 `5 e- S3 }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 Y% }) T9 ^6 {( V- B! F
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; ]$ z9 C. n4 R# i+ D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, Q) ^1 M& M; Y: h
  672.         for(i=0;i<240;i+=8)
    : Y3 @9 {" ~8 s
  673.         {
      O0 X1 y9 x0 [7 `6 d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& \' M+ u$ U5 }3 L: F% R, ?! c
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: [" y( P: u% s2 s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 B& s; q2 |# j5 C
  677.           Sleep(33);
    8 p; y5 Y. X% l3 ]: O6 J% N
  678.         }0 R- ^0 h4 g9 k
  679.         Sleep(1000);" A$ I4 S! R( Y0 X! r* }+ O2 m
  680.         for(i=240;i>0;i-=8)
    4 w* `. V1 m3 B! e. s3 d+ c
  681.         {
    * Q; m- {8 u4 R* V' f, o% ]
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! M$ r' |2 G0 ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 K$ i9 M9 U& D! `
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 ~# G  }% k/ v% P, {& z
  685.           Sleep(33);3 ]- g0 |4 n; M$ T9 Y
  686.         }
    ( ]0 X3 q, J- [5 `0 Z% w
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 s, T: R( _! T6 C; m
  688.         dlg->ReleaseDC(pCDC);
    * N3 c5 X- |' n; W- ?
  689.         DeleteDC(hdctar);# @2 w$ L' L7 w  j$ O
  690.         DeleteDC(hdcsrc);
    * ~) B5 A" h: h% t
  691.         DeleteDC(hdcorg);
    / [1 i5 Q1 u' |: R; ]( Z
  692.       }( e& b" N# p' S0 r+ {3 |. b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ c# J( g; x. p2 D; J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" N% z  `, \  _; z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. Z8 h9 L9 y- L% _& [- @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" H) M; W7 }9 b: l+ W/ G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 [. s) K# @) x4 e3 W3 n, Y, O
  698.       if(!Dn.Connected())% V/ E. p; b' r5 e' W/ d
  699.       {' N9 y+ `' Q" c" U  ~) G) p
  700.         dwTotalFiles=1;. W: k. Z1 J6 Z5 C# `; j2 d9 y
  701.         dwDownLoaded=0;: E% m: @& g) X# a" P9 k2 Q
  702.         bSilentStep=TRUE;
    & J+ B! }, v4 `- @- E2 X6 Z
  703.         bCompressed=FALSE;# M: \3 N$ @% N2 C! U
  704.         strExtLocal.Empty();1 E8 }( J7 C, {( E; {
  705.         strFullName="readme.txt";1 m- C1 f! |9 H- k( p
  706.         dwProgramState=AP_CONNECT;3 u% z0 S" U/ ^4 l
  707.       }, F& o  c2 i; `, G( r" }
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();- A1 w! ~& }5 h8 f; L; y* Q6 k, `
  709.       dwStartUpSteps=2;* e$ e% C" x* r7 M7 @. g, u2 H
  710.       break;
    2 R! H6 b8 a0 h
  711.     case 2:
    7 D5 Y: E/ d' e) q
  712.       {
    8 ]1 Z8 B" c: O, J% b9 F
  713.         int iEOF;
    : S0 [# i) E6 A' Z
  714.         FILE *fp;
    9 L0 [- g' ?$ }: b: Q! O
  715.         char szString[512];
    & O( w! u5 T  E. C8 b) q$ ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: Z* w; @$ ]$ m$ J
  717.         if(fp)
    . H' s4 \' ~' @1 i' a9 y7 C) s) j
  718.         {! l! Q5 D3 k) K( d* R% J  ~
  719.           do6 ^$ a/ A  d) K- W3 l
  720.           {8 X) I; g' l  y. H
  721.             iEOF=fscanf(fp,"%s",szString);
    " d, R' E5 {: h" c8 r% L
  722.             if(strlen(szString)), g! {" J$ _" U8 V% P
  723.             {
    & C; W' g$ f5 D0 M$ j9 ]5 B
  724.               if(bFirstChar)! D+ }% \+ W- W1 Q8 ]
  725.               {
    0 u. p6 G0 p9 \3 F0 g0 J
  726.                 bFirstChar=FALSE;. W: [/ z6 ]6 L# _% ?( ?
  727.                 bConnectIsBig5=FALSE;
    : @! z, \+ ~* `& H- E( G0 O! q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) E' @1 _  F" p. u2 j& @1 ^+ X
  729.               }
    / S( K' b5 p9 m" d$ F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 j( w. B; w8 B8 d( m( y; x# ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! a! ^+ L7 c3 U) j3 }, N: N4 D( ]% @) G
  732.               dlg->m_ListText.AddString(szString);
    # F' b  k5 ?. i) f4 ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. B1 r" [" w! Z1 w! j9 f, R
  734.               *szString=0;: y- C; K+ K8 R; d4 t
  735.             }
    . F0 f% w- p' j) I. H2 O) M  ~
  736.           } while(iEOF!=EOF);. y: b: [/ s( d- Q/ D& {% d8 z
  737.           fclose(fp);2 y( Y' x! ]8 g; b
  738.           unlink(".\\DownLoad\\readme.txt");
    . b1 t- ~$ @( ]/ O( R4 u6 A7 d
  739.           dwStartUpSteps=3;
    ( C' F# W* [2 V/ |2 O% P/ l
  740.         }$ |5 [% |+ i5 G7 B! h, @
  741.       }
    1 ]' W3 W5 _: g1 y3 W) t& k3 S
  742.       break;
    # f; D" f8 Z3 E$ p
  743.     case 3:- J3 m# N$ V* {- @8 u
  744.       if(!Dn.Connected())1 s  R6 q- {7 O' X9 _$ \! o6 l6 L
  745.       {
    ' l& V, H* W4 r  ^. @8 v$ Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) O( f- i  y( N8 |* K, d
  747.         dwTotalFiles=1;
    2 e* P1 e5 k; T! g+ n6 J# C
  748.         dwDownLoaded=0;0 O3 H7 Q7 L0 I$ i7 U
  749.         bSilentStep=TRUE;
    4 \4 s! O# @& d6 H5 }
  750.         bCompressed=FALSE;. G, q; ^1 g; @! \, [$ j- V: _3 \
  751.         strExtLocal.Empty();- r* ?3 O# C+ W# Z; k# y
  752.         strFullName="checkversion.txt";4 o5 J/ I3 i8 A" Q4 ]5 R# q( X
  753.         dwProgramState=AP_CONNECT;
    2 K  ~1 X9 r% i9 M
  754.       }
    ' r2 Q( g# T: C2 s5 X
  755.       dwStartUpSteps=4;* H7 A3 B7 |" K" A! j
  756.       break;
    ) V, F) _: ?( L/ n) ?$ E" Q1 @
  757.     case 4:
    4 X& S. B& i# i9 X' `5 q
  758.       {. y7 I9 j6 |: S8 ]" J8 i- _
  759.         FILE *fp;/ j: R6 m% a! O' F6 ~2 }$ _5 n
  760.         char szString1[128];
    9 r) n4 Q+ o" D5 e4 k
  761.         char szString2[128];
    / Q! l5 N7 n- E; p
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ I+ A. Q4 L5 S& e: @% e
  763.         if(fp)0 |% W: n3 C; v4 R# p2 q# B
  764.         {$ J, x0 }5 E6 P0 ]4 T1 g+ [
  765.           fscanf(fp,"%s",szString1);; `, {8 C% b6 h
  766.           fclose(fp);
    : x" p( {$ K" Q5 R
  767.           fCheckVersion=atof(szString1);
    / x( C5 i' u) O$ i( @, C: ~5 {, Y6 W4 |* w2 C
  768.           fp=fopen(".\\checkversion.dat","r");# N9 R+ F6 E1 A# X* m1 e  ^0 f( t
  769.           if(fp)' C( R, c/ ?9 ~  U
  770.           {- p- F, e/ Y& D% V  D; b- M
  771.             fscanf(fp,"%s",szString2);7 Z" T! \3 [9 n' u& M
  772.             fclose(fp);% S% T. a3 {) A" ~8 y+ D7 V
  773.             if(atof(szString1)!=atof(szString2))+ S6 ]$ ]4 `& _; P# c! N
  774.             {$ J7 G5 z1 z8 b/ l( J. W' H
  775.               if(!Dn.Connected())
    9 v0 E" i" \( d! T2 D5 N, m$ L
  776.               {8 S* F- ?. g: C: X$ e
  777.                 bFirstUpdate=TRUE;
      J' w  l! G; S0 _9 ]: O* l: U
  778.                 dwTotalFiles=1;* r6 m) c5 G- k/ o( Y% i; ~
  779.                 dwDownLoaded=0;
    # E% F: F7 g& K, R
  780.                 bSilentStep=FALSE;
    $ c, R6 q6 |9 o
  781.                 bCompressed=TRUE;
    ' x% F3 L2 d2 H3 f$ i
  782.                 strExtLocal=".\\DownLoad\";
    2 l& D1 V4 p0 A$ P8 X. _+ b
  783.                 strFullName="update.txt";1 a+ [3 N9 {# e/ Y* q' b
  784.                 dwProgramState=AP_CONNECT;
    ) U3 g0 C7 |% w" n
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 @( i( ]5 [% u* A& k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# U1 K, E; i! k+ I1 H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) W4 b2 R( V0 d5 S7 r7 W% E4 K) u
  788. ' g) d, ~* d  p! J  A# _8 S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 e7 Z2 N! q3 @# U1 i
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 i: r" P, _2 n/ n, L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    8 F% {  v% z: F# T) i( M4 V( h' J' g
  792.                 {
    , V! v1 P: V* _2 M4 l! ^0 q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 g/ F9 |: X& m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: ^' l. K2 C6 M
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 q& c3 Y5 l; J% ?
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 C& Q/ s  D1 G. G
  797. 0 L7 v6 S: c$ J
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / A8 Y1 W- f; ~5 t# V* G
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# g9 r6 O1 c4 q, F0 V$ P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    & C9 z; w/ v; Y% O" T
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . U! k  x; w' U7 p, a8 o
  802.                 }
    / A7 ^/ B7 F$ h* }$ q; l
  803.                 dwStartUpSteps=5;
      M2 D) o% E- A3 g
  804.               }
    " J# {: i1 W6 n5 {
  805.             }. u- M5 U' Y- \; t; c# z
  806.             else
    0 h6 m; f: c4 V# e& ~. B6 N. D
  807.             {
      X; {! `. I: m+ U: |$ Y+ j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . {3 `1 Q$ z! `3 V6 ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: i6 I: l; g& I( G9 W1 S. r3 J% \  [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + y6 ]! L+ _0 s: Y" w% Q" P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 u+ ~8 I% v0 P5 R$ J
  812. 9 B7 z6 ~1 m+ |8 C# p$ L% L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . o4 }3 E& \8 n' X) P. I
  814.               dwStartUpSteps=99;
    . F: `8 V3 E2 i/ D1 x; t
  815.               bFinishUpdated=TRUE;/ U( n& x" z/ S' N& U$ e0 V
  816.               bCanUpdate=TRUE;
    , _$ G& }7 D3 d4 C8 D% C
  817.             }! j. O3 h! w$ f8 y4 L" [: K
  818.           }+ P; [6 v8 E0 v' S: F- Y  M* j& P5 m
  819.           else: u1 e  E7 d5 _' S2 n% Y1 d6 Z( X
  820.           {
    5 I& T# q# Y3 K' o1 V
  821.             if(!Dn.Connected())
    7 I5 y0 Y& v8 ?1 O7 ~- R* [
  822.             {" \3 i' H+ [# ^4 U( l
  823.               bFirstUpdate=TRUE;
    0 z7 I+ B* Z- [: [; J$ a1 @5 K. ?
  824.               dwTotalFiles=1;7 l" u6 J. I2 @# `) ^9 U
  825.               dwDownLoaded=0;( t& K8 v% ^- q' H0 \
  826.               bSilentStep=FALSE;, E8 \" L# F7 w' J' z, V
  827.               bCompressed=TRUE;
    ( j8 D# M8 X$ Y0 i& M/ D( V
  828.               strExtLocal=".\\DownLoad\";2 [$ ]$ i  I9 {  a9 _/ ^  s
  829.               strFullName="update.txt";
    $ C/ [4 _% Y" d. j  c- w
  830.               dwProgramState=AP_CONNECT;
    9 ?2 ?, O6 b2 a9 E6 T
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");6 g6 h) a6 @/ v! v2 x( l: v) Q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% J* m/ f- k  C" o& y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) ^5 [, p3 l: W( ~' e8 k5 I
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% r8 |3 b- x2 g* f5 I: L9 @4 \
  835.               unlink(".\\DownLoad\\checkversion.txt");$ h2 w, ]: w$ g& L# Z- Y$ S
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 ]6 M) K4 K2 O% V
  837.               {
    % f5 l. }! b, v; z  _5 O
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    8 H& k# @% N; {+ X8 S6 i2 d8 S3 F
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: F0 e% C4 Q( d0 k. O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      G3 \$ R& y, ?0 F
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : ?! h' S  R! t- {0 s0 q- f/ k
  842.                
    ) w/ ?" x" y' y7 Y+ K! q0 |
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " o3 J1 H4 |. _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      V+ w' `4 X; ]: ~" e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    , S, P7 @( U% m* c4 k3 C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 j+ i/ O" {5 y' d1 }
  847.               }( J" |! V5 @, c, W- a
  848.               dwStartUpSteps=5;2 {% B1 u. [% ~" K9 L! v' i1 }6 J
  849.             }
    + D! _% L4 E0 J
  850.           }
    . j. [4 f. y) i/ h9 y
  851.         }+ N7 W& Q" ?6 h: E$ W) }0 C: {4 V
  852.         else4 [3 l* k; G  R3 d
  853.         {1 M& `. L0 A  q+ b# A3 U$ G. A- y) {
  854.           dwStartUpSteps=3;
    . j+ S3 W" k( Y+ E/ R) I7 X& K
  855.         }
    * D' N: d2 }$ a% K4 y1 {! C9 |
  856.       }
    / b$ A5 D! ]3 F! D5 m
  857.       break;1 X5 Z$ K% G1 t
  858.     case 5:
    5 t( {6 \) g# j# U) B4 I& ?  M2 J% k
  859.       {5 A4 X& a- {# J) c2 t& L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 B& r! g/ a. T% b
  861.         {' @/ P( q$ s- x. f) ?
  862.           int opt_overwrite=1;# u9 m& B% M* A$ L% ~* K1 n, c6 d! t6 r
  863.           int opt_do_extract_withoutpath=0;
    ( n$ r. v, _! o$ c- N
  864.           unzFile uf=NULL;
    ' Y( K, c, I' g6 Z2 A, ?8 i- n

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

. S9 O6 ]( {; J; U: n7 g) Q! {. f) H! d* N' a& 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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客服返回頂部