CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
* y6 {$ ~+ [5 k5 N
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ k! m) S3 a9 w1 z
  2. //
    6 S- W6 ?0 w7 a/ C, g3 @7 ^

  3. 6 ~- _4 v# q# x5 e! @
  4. #include "stdafx.h"5 q1 e* Y9 o* E+ N; ~0 X

  5. 0 l3 i8 A# [, C5 ^
  6. //#define UNICODE
    . `0 e/ ~  A2 d, u- ^9 e; j
  7. //#include <gdiplus.h>
    3 u& J; z9 F+ e# j1 @  ?: I6 n9 I
  8. //using namespace Gdiplus;
    ; L# y8 t; {7 M
  9. " u  J$ s2 W$ W
  10. #include "RevApp.h"
    : \& F8 q; {% l) z. A
  11. #include "RevAppDlg.h"
    2 i& O5 Z5 n) \; M; w# J2 D

  12. * a# z8 b  W+ H% @
  13. #pragma warning(disable:4786)6 j' R  @/ n) V: u# V
  14. #include <map>
    % H! R: T( ]3 L. s
  15. #include <list>
    ! j- k1 O5 V4 F2 ^9 y  q0 ^
  16. #include <direct.h>2 }- v0 k0 a* Z8 _
  17. ; V, A5 _6 K5 y9 N- e
  18. #ifdef _DEBUG5 x" p3 t0 A' i
  19. #define new DEBUG_NEW! |$ _& n8 X8 _( B0 s! `9 o
  20. #undef THIS_FILE
      A5 ]4 b+ \# |- u  t
  21. static char THIS_FILE[] = __FILE__;- t6 k4 s9 p& x# t
  22. #endif
    . q% C/ M4 {+ B5 A6 T
  23. #include "SkinResDef.h"
    + z7 U. q8 n  ?9 {2 B! ^
  24. #include "ChangeBG.h"
    8 G$ h. n% W3 |% W& D
  25. #include "AFXINET.H"
    9 u- o) ?$ X! j" }" [2 V& L- B
  26. / t1 Y: s9 ]/ |9 ?3 H/ }$ w
  27. #define TRADITIONAL_CHINESE 0
    ' O6 f# M7 B& e  V1 y5 d) W4 S
  28. #define SIMPLIFY_CHINESE 18 h) K) \. R) v1 R1 `% m) g7 R
  29. #define ENGLISH 2: b7 `, H6 z6 p+ w
  30. int m_iLanguage = ENGLISH;
    ) J2 e& ~' |) r# ~1 t
  31. /////////////////////////////////////////////////////////////////////////////; @2 l3 Q  @8 n
  32. // CRevAppApp; b% ?1 ~- K0 W( {

  33. 8 t% A( y6 S0 |, H
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( E8 y% z' h0 N4 B, F$ M; U
  35.         //{{AFX_MSG_MAP(CRevAppApp)" ?5 q2 G& U. P
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* M  }* y# F: e; Y. u0 w. P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  t6 U  _4 A, x7 D* x: X8 x8 ]1 k
  38.         //}}AFX_MSG9 w  s  \0 s/ ~, {# n8 }+ b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# n9 Z5 ?& X1 f7 E3 A" X* U
  40. END_MESSAGE_MAP(), k2 ~3 a9 ^4 g/ [. ?

  41. * R) Q: z, s2 M. x
  42. /////////////////////////////////////////////////////////////////////////////
    / J, E: O2 K2 o3 ^. \5 R3 r6 G  F
  43. // CRevAppApp construction
    ; c( L; [# D$ F

  44. 1 O  K: R2 {; t
  45. CRevAppApp::CRevAppApp()7 X; f! M4 v9 A3 s5 l
  46. {/ L0 O$ a% ~7 x/ a' W# b  j; c
  47.         // TODO: add construction code here,
    . C! `# r$ j# ~$ |) X0 S
  48.         // Place all significant initialization in InitInstance
    8 {# u0 ^8 O, @- |
  49.   bDisplayIsBig5=FALSE;
    3 R: Y0 J! T- i; W7 p1 H; {
  50.   bRestartUpdater=FALSE;2 g9 H( c7 Q; S- L$ p
  51.   bFinishUpdated=FALSE;3 Y8 @3 m' _: t' {8 C* }: [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; o6 s1 {3 P4 r' C! A. V9 i
  53.   InitChangeDataBig52GBKS();- d0 M1 n6 f2 p( `$ b
  54.   InitChangeDataGBKS2Big5();, o# j" V' o* Q! M) A5 L+ A) S) z
  55.         //
    5 B# M8 ?- `, o" J( y+ U- H
  56.         bClickRunExe = FALSE;2 T0 z( p3 w. k9 O
  57.         //$ Y' q! d' ?! }) w8 s( V, k
  58. }
    . D# O; e- n; j) O/ {, J

  59. , ]2 D7 d$ V* f8 E1 A4 k3 S
  60. CRevAppApp::~CRevAppApp()7 G8 g5 z$ q+ P/ o4 `4 I3 I
  61. {
    - J9 Z3 W% l! |; e3 i
  62.         // TODO: add construction code here,6 |) V% Y1 y. ]" t  u7 h
  63.         // Place all significant initialization in InitInstance8 f- _9 B$ u+ d4 Q$ G
  64.   EndChangeData();
    8 `0 A8 f1 L3 H  }# I$ b& D
  65. }. W; G. i+ S1 L9 j  c

  66. % T% U5 t5 J3 g/ ~2 R/ Z( ^
  67. /////////////////////////////////////////////////////////////////////////////
      d8 o2 t. x% ~- Q6 |
  68. // The one and only CRevAppApp object) g, m/ O5 E! a) z% w
  69. 9 h2 d  k" r  C0 `
  70. CRevAppApp theApp;9 `; [+ W* `% O8 X
  71. 1 K$ ~; R8 u& D6 h- l% _2 n- @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)# s; e7 g( z9 i# }3 }
  73. {7 u" H9 o+ i$ Q/ O1 {, ^
  74.   int iEOF=0;  F- E0 W  `6 s1 J- `
  75.   char szTempName[MAX_PATH];
    - ~6 ~% C2 l+ y
  76.   *szFileName=0;
    # a' }* q& U4 ]# M5 g5 R0 r' v
  77.   iEOF=fscanf(fp,"%s",szTempName);+ Q1 m% T# E8 ?$ _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): u1 d& q$ e0 S1 N5 I& V6 R& ~
  79.   {
    & {2 _" p. S* ~8 k- u2 U9 G! G+ d4 ~
  80.     strcpy(szFileName,&szTempName[1]);/ J$ ^0 y, A1 E
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ g* G! j! m3 I$ p. o
  82.     {
      D$ \/ _% X6 f) I: x
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % B" i  f6 B8 \! \: B
  84.       strcat(szFileName," ");& t5 V& b/ r5 s: u8 M2 o! @4 N
  85.       strcat(szFileName,szTempName);2 p& d) _; y# E1 f+ t
  86.     }
    ! G. Q  u: m& r' D1 V, I. P* R
  87.     if(strlen(szFileName)>=1)
      S( @% R7 N+ {1 A
  88.     {1 k9 W( g' U1 R& f5 u2 ]
  89.       szFileName[strlen(szFileName)-1]=0;1 G0 u% `! Z. D6 |" \3 w* N/ x; f3 ?
  90.     }
    2 O3 E) a  |1 l9 G. T0 `
  91.   }3 e7 Y3 @  M+ }9 v* f2 P, h
  92.   return szFileName;
    % W7 b9 S7 _" n( b. F9 I& O9 j
  93. }
    ! I( G* _! _) u# j4 I( i
  94. 2 n& a7 R* G7 G8 C: M5 f
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) \! G" C3 Y: g+ `$ h9 J, D
  96. {
    $ d- u; g' J2 b: ], ^
  97.   FILE *fp;
    - t5 J/ Y% m1 N, n& L' v
  98.   char *key=NULL;/ i( v. J" w3 w" `0 K/ G
  99.   char version[MAX_PATH];' D3 o# f4 a8 c( ]5 I
  100.   LPUPDATEFILE file,olds;$ p( F4 O; y! o; A, \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ A: {4 @8 S" z- _4 }. _4 [
  102. $ L7 ~# s/ j5 O* g8 `& F) u+ {. z
  103.   UpdateList.clear();
    / b( U8 ~) j% R) K
  104.   UpdateFile.clear();3 B. Q# W$ D7 s- h2 O; O' o$ }
  105.   if(GetFileAttributes(filename)==-1) return false;
    & D+ T& Q2 X+ s' o. F
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % d8 k, C3 A. f8 s6 x
  107.   fscanf(fp,"%s",version);: S1 f' B1 l/ e% B7 U- G
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( k2 J( [- U# G  X
  109.   while(fscanf(fp,"%s",version)!=EOF)# K9 k5 F6 s1 L
  110.   {8 S/ b" |6 |8 q- D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( k9 W5 v8 }. G& k% R( w) N* m
  112.     fscanf(fp,"%s",file->path);5 [9 h9 C  L8 P+ Z. N; ?
  113.     ReadFileNames(fp,file->file);( k9 }+ |) M8 {& l  ^6 {& a
  114.     strcpy(file->full,".");% W8 M5 W8 Y1 U5 f+ G' Z
  115.     strcat(file->full,file->path);
    ) s3 h7 D) m5 v( L- g4 a
  116.     strcat(file->full,file->file);* a% r1 Z8 f9 e- B8 t- O* b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # X: I& x/ Y5 b: ^' f  |) Q, ^0 d# i
  118.     {+ _8 i/ B$ ]; ]% ]1 y
  119.       file->vers=(float)atof(version);4 k% D2 g: I( ]  W2 Q( x" m
  120.       UpdateList.push_back(file->full);
    . _: ~/ ^1 m' x5 u. X  u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. `5 n: ]! h. m/ o5 E5 R% N1 t
  122.     }' t& o3 ]' X- B1 W" v
  123.     else- H# i# L! R, _2 t/ f' C% `
  124.     {8 b4 L2 ]2 ]% l5 ~) m0 y
  125.       olds=(*p).second;, k, j* j# r0 u2 y
  126.       if(olds->vers<(float)atof(version))
    , J/ i1 F+ H+ F1 Y' O
  127.       {6 G, d* P9 T% E' ^  O$ y2 ~1 a" r
  128.         olds->vers=(float)atof(version);
    , Q, r, X( p3 g4 L
  129.       }
    4 _) U' G/ G6 U! d9 X
  130.       free(file);
    ! A" p+ ~) U4 x5 V' ]+ M. ^
  131.     }
    / J7 Q5 ?- {  q$ F7 j. Q
  132.   }& u$ b3 w2 K. Q- t; ~0 w
  133.   fclose(fp);6 E: B; x- \0 z+ a1 S* F
  134.   return true;. ^. e) L9 I5 f4 Z# r- m5 U
  135. }
    7 b# P4 S' `9 I6 i4 c$ t

  136. ! _# _9 ~9 B# c
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 W! c. ?; E* P3 X0 \" M, P( x' U
  138. {4 q3 f4 B7 G( {7 N) y* X
  139.   TCHAR  szFull[MAX_PATH];
    4 U9 E9 _& Q) i* p* k( Z
  140.   TCHAR *token,*inter;
    6 |& K+ l9 ?5 ^! V% d- i
  141.   *szPath=0;( J7 i6 c$ {- H( u1 K
  142.   strcpy(szFull,szFullPath);
    : E; K- O- n! s) e
  143.   token=strtok(szFull,"\\/");, v$ }. a: s5 _! ?0 k7 Q6 M- m2 f
  144.   inter=token;9 X2 N- {0 G5 M/ C, v  l
  145.   while(token=strtok(NULL,"\\/"))
    & ?" I6 I9 {1 K6 @0 Q! S
  146.   {
      ~" G5 g7 Q! r2 J
  147.     strcat(szPath,inter);9 L; y: h$ o, G& M
  148.     strcat(szPath,"\");4 U4 p% G, Y0 V
  149.     inter=token;7 ?1 W$ F5 T4 r9 V( j( i% y" W
  150.   }, M% `7 L/ n/ q* |/ G5 ~
  151.   return strlen(szPath);
    7 _3 {$ u& w9 f! R6 u  R
  152. }
    1 y8 j) o% P2 y! U  ^0 @: c

  153. 0 Y6 I) ?+ @' \* J5 e4 A" P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' I' ]6 d% o9 m2 H$ p
  155. {7 R: O; M/ t4 \7 w8 ~4 A
  156.   DWORD attrib=GetFileAttributes(Target);
    ( U0 Z/ z5 a% p. a. V" m& P. M
  157.   if(attrib!=-1)+ ~! q6 Z9 K: X% u( D! r
  158.   {
    # g! ]2 U: l# }6 }, U2 W1 f$ p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 l1 ?" d7 t% r4 `2 y% M. Q
  160.     {+ f! X: G. n1 t2 c. r* s: t6 V8 c
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* }  a8 I% ~  q
  162.       SetFileAttributes(Target,attrib);. s# ]9 ]$ T  w
  163.     }" `/ h- |" O3 k# n, _1 l
  164.   }9 e( v1 M4 X, ~. E% u1 D+ `$ b* c
  165.   CopyFile(Source,Target,Erase);
    3 @! y6 ~" g8 g3 ]; \
  166. }
    ) n) z* _$ o9 H/ g; P

  167. ( U" l7 y" m6 ]$ I" V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# J& I. e) m5 j1 C
  169. {
    9 l& H$ h$ s+ `. D2 q$ R- H( t
  170.      FILE *fp;
    / x7 O, b/ q$ e
  171.      char  szBuffer[8192];
    * b+ C6 }! |* B3 S* v- ^
  172.   va_list  argptr;( a4 w5 n! d/ s: h
  173. 5 J+ C& i: V1 S1 N% f
  174.         va_start(argptr,message);9 i. d, a9 F+ F( E  N( J
  175.         vsprintf(szBuffer,message,argptr);6 W. ?9 `3 r0 e. S
  176.         va_end(argptr);/ |- V' W- {% [$ S( j, z, d) C2 O
  177.   fp=fopen(FileName,"a");
    4 _$ m6 E4 z8 y% `# i
  178.   if(fp)
    4 q* Z, w4 u8 C! |. O! b
  179.   {7 @4 b) |7 J5 C2 X* _2 h
  180.     fprintf(fp,szBuffer);
    + a, L' W" [  [0 X" \
  181.     fclose(fp);
    $ @/ t, S: u' E4 @6 M
  182.           _flushall();
    ! M% D/ P2 g6 `: d! x
  183.   }# z" |  A$ v: a* B0 U
  184. }' I5 z% V* y+ l9 P9 ?! c

  185. 1 F( x2 o# q( x9 a
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ R$ r4 y3 E9 M9 F6 c
  187. {
    & Q3 R7 Q2 k7 I* i
  188.      FILE *fp;
    . J  D8 z+ u! f# H: W
  189.     DWORD  attrib;7 K) z/ x9 n: H
  190.   attrib=GetFileAttributes(FileName);+ e7 ?, o9 S) p. a, v% W+ r: O
  191.   if(attrib!=-1)
    7 Z( b! {9 N/ j1 F0 ^% P
  192.   {7 [: M7 V/ ~  @$ A! l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" e8 `6 ^# a" y& E+ T
  194.     if(!SetFileAttributes(FileName,attrib))
    3 k# p9 u: j' k
  195.     {+ j! o9 ?- Z% c
  196.       return FALSE;
    " U" K" Z3 [/ g; G9 q
  197.     }, c4 T% H# ~8 O; A& w
  198.   }& e6 v% t8 p& l' y8 R
  199.   fp=fopen(FileName,"wb");) g9 t+ `$ ]/ r
  200.   if(fp)
    1 K/ H( g8 H; o5 Q; m/ h7 [% s
  201.   {
    0 S+ W- D0 n, F8 n, m
  202.     fclose(fp);
    * q2 i8 q; r" G* c, L9 w2 @
  203.   }
      ]3 s8 A7 ~- C5 R8 ?- C
  204.   return TRUE;- s6 a5 v1 _  I/ p! p
  205. }
    0 \4 c& T  t/ v4 Y
  206. " r# H) |5 a) q  \1 Z* f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 q+ @: A% I: z- V2 X) Y4 ]+ ]5 ?
  208. {+ J4 P1 k3 W" ?
  209.   char filename[MAX_PATH];
    ( A( i# m; v2 e- z! `; C
  210.   LPUPDATEFILE file,olds;
    9 T+ _( m6 N: S, C
  211.   std::map<int,CString>::iterator i;
    , q5 E7 P! E3 c1 E" p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    : G( F5 d& Y+ ~1 e$ _* f$ z
  213.   std::list<CString>::iterator l;" h' o# Z0 X; W
  214. 1 B8 B8 {4 q" Z) k8 m- G/ V
  215.   if(bFirstUpdate)9 N- p7 H6 z. u' m8 M
  216.   {$ Q. a! |* y/ i" u2 Z) e
  217.     dwCurrFile=0;
    0 l& I; v! B; n5 z" U8 Q
  218.     bFirstUpdate=FALSE;
    + I1 I$ C1 x6 ]0 r$ _; Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - j: L- }1 Q! U, J( w, D0 u  }( a7 t2 |( |
  220.     {! B$ I/ W6 G4 Z0 u$ P& A, o
  221.       dwTotalFiles=UpdateLocal.size();/ a# p8 R: I/ R0 p% ]6 f6 W
  222.       dwDownLoaded=0;- r# a( e+ R! ?: `, A0 ]+ l
  223.       bSilentStep=FALSE;' t$ X5 I. u  W# y/ ^7 c6 i
  224.       bCompressed=TRUE;, K5 [3 _/ l; p0 @' B9 x3 W
  225.       strExtLocal.Empty();" H, s, p! g- k0 S  |5 ~2 V* K
  226.       strFullName=(*i).second;
    7 V( h+ h  D3 F  w0 T/ M1 F; W
  227.       dwProgramState=AP_CONNECT;
    # V9 V. ^/ K4 Q5 F
  228.       return TRUE;
    * P; P. Q* a+ a4 {' b+ g/ ?
  229.     }
    8 U! m. ^2 k5 c4 s4 J
  230.   }6 N0 r4 U1 r- [- Z( k4 W9 u, ]
  231.   else if(bRestartUpdater==FALSE)! `4 m; B( w* @1 X1 c8 D- \3 D
  232.   {
    1 j6 C# Z: S3 m/ L+ F
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): W% o- n+ Z5 `: z5 S
  234.     {  I7 \( u$ S1 V; T6 {* {: `6 |
  235.       file=(*p).second;
    6 x5 T* v9 k/ T& `  c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! H! F3 D/ v; e) t4 w1 k
  237.       {
    / W$ T) B1 H9 w/ X
  238.         olds=(*p).second;- p2 k; ~( x/ f- k6 d7 b/ @$ ?3 g
  239.         olds->vers=file->vers;/ n0 a; [3 ?) a1 _
  240.       }
    , b  d( m  _' d. d1 U
  241.       else
    . s3 l; K! N" {, P; E
  242.       {
    . }, i0 s( h6 Y- O1 {2 E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# o0 o' z( I* j: @/ k2 J
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( n( n1 N! e. Q8 ]& T! a& }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ j# n* q% N3 A. o& D) k0 C
  246.       }, ]; w6 U: d) R1 C+ d$ A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' W; G4 W3 V- _7 h
  248.       sprintf(filename,"(%s)",file->file);
    2 u( I0 D: z- n6 G. u7 H$ A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      |) k9 U: w& p' I* z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 ~- A6 j, o; e/ t) b8 ]/ M0 f0 P
  251.     }# ^. V; Y# `# G2 F$ P3 M0 M
  252.     dwCurrFile++;, C4 X6 x; s' w# `, H! ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 F, N) F, B, Q" D
  254.     {7 f( [4 J7 X/ M
  255.       bSilentStep=FALSE;) h7 s$ R! S5 S( D. w( m
  256.       bCompressed=TRUE;
    & {' V2 T" n) i" t) x3 Z# ~5 }* K6 \
  257.       strExtLocal.Empty();4 c; X' e# D* Z/ s
  258.       strFullName=(*i).second;
    # j+ e7 V2 j( g9 U7 [3 K
  259.       dwProgramState=AP_CONNECT;: m- K2 Y( v5 _+ V  J. Q8 H& }
  260.       return TRUE;
    6 E4 a; W1 F$ s! J' ]
  261.     }
    9 |. W/ N9 G3 j# ?+ u
  262.     if(!bRestartUpdater)4 X2 ]4 e" ?6 o  S7 g( n, Q
  263.     {. ?3 w- C' v6 F1 @" R5 w" m" u' f# X" r
  264.       int iCurrSize,iFileSize;
    8 B% Q1 M) @. [9 c1 C; b2 F
  265.       iCurrSize=0;% p7 C# u+ Z5 D2 n2 F
  266.       iFileSize=UpdateList2.size();
    / R: c  [, b' X& r' Y2 a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 K/ I; v1 E, E7 V$ V$ e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / T" h/ j, J) G' R, q$ u( |
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    / w9 X5 P3 h. g* P% s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 a. ^% i3 G7 W) J
  271.       Fclearf(".\\update.dat");
    # [, S1 l8 D1 s1 t7 h
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    7 M) s$ a, ]3 E9 A: V5 u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # G2 v1 z3 S7 a5 R# a: _9 a
  274.       {$ V3 C; C% G! y& h! `; K- w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()); N) C/ s2 Z; z7 F
  276.         {' N0 [8 k( d, z  w; D" i; w
  277.           file=(*p).second;
    6 [) m" U2 J" o
  278.           sprintf(filename,"(%s)",file->file);
    4 T6 P$ V) q# `* e; I4 V( w' e( o: h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 A! B2 g/ d. i- W+ i
  280.           iCurrSize++;5 X# ^( p; S4 X6 t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 I" F/ h: z0 y* Y7 K( O0 p8 j
  282.         }
    ( W- b- a$ ~3 m% Y# d
  283.       }: e4 D+ Z0 c' ?+ {& Z5 D' M
  284.       unlink(".\\update.txt");% {! `2 {8 e( G9 V" w- k
  285.       unlink(".\\update.tmp");
    ) ~( n6 ~8 G3 I6 Z* b8 z
  286.       Fclearf(".\\checkversion.dat");0 Z, t8 v: X( h0 O- Q% T
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);! X3 R) `5 |: C: ?7 O3 l
  288.       if(UpdateLocal.size())
    " r1 l: p  X% q) G
  289.       {" t8 u" Q, i1 H: D" l7 N
  290.         UpdateLocal.clear();% x2 u8 L# J9 M7 x  B
  291.       }
    ' q8 t1 r; v8 W7 A: g' Z
  292.       if(UpdateFile3.size()), b1 Z) ^9 h% }3 w$ z
  293.       {
      p( t3 c$ X# C' o5 ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! y$ _# I- B+ |. b
  295.         {, h9 I3 K/ P# _& A$ t& E
  296.           file=(*p).second;
    / Z8 J/ ~* W; n+ ?- E0 S7 Y
  297.           free(file);
    % z  Z! A2 M1 W* U- q9 I' |1 x
  298.         }) Y1 \& Q* N: @9 k5 D
  299.         UpdateFile3.clear();; W  k' \/ p& r  `/ h6 K
  300.         UpdateList3.clear();
    2 L# P3 t- X. g5 d! A; c
  301.       }
    ' L" v% |7 M4 j& R  ^
  302.       if(UpdateFile2.size())0 Y9 a( m& J  V6 [7 C7 N
  303.       {
    ' u+ h) y# Z2 y3 @+ n3 O- D# U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 ]* F7 k' z; s' z7 r3 G* N
  305.         {% U( e- f1 @: ^
  306.           file=(*p).second;' _- R& s9 r$ G8 ?" X4 ?
  307.           free(file);
    7 ~- x" l  F; T5 `6 D) G
  308.         }
    4 d' P( D2 b  a: L" G3 j0 d& s
  309.         UpdateFile2.clear();9 X$ _! D" Y' s; T% I& u( Q
  310.         UpdateList2.clear();4 M) G7 E+ h# W- s
  311.       }
    * i# s8 Z  U2 |: ^+ i7 p
  312.       if(UpdateFile1.size())
    . n; K. T* a) A: E9 M, a+ w
  313.       {) P8 J: W; Y# x6 y% T6 o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- \; A; n! F5 \
  315.         {3 h4 C: B3 b1 G
  316.           file=(*p).second;2 G- H; c: \! o& S( C8 O
  317.           free(file);9 m0 O( p+ m: b- Z
  318.         }
    & F% G/ k: h/ z6 v; _6 b1 P
  319.         UpdateFile1.clear();
    3 f# x- ?/ n% \1 I6 q% t: z+ t
  320.         UpdateList1.clear();
    ( `, _7 A" E* L- d3 t( r3 Q
  321.       }
    . v* v" G8 K0 h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ! R7 j! c6 N: {+ ~0 B+ R
  323.     }
    , V2 h$ e, J1 j& W1 ]0 |
  324.   }
    * [9 ^% Q% x, _) ]! N% F+ S3 Y
  325.   return FALSE;
    % n; y5 `+ H$ \
  326. }
    9 k! Z& d8 H* {5 P/ _; z9 V; I

  327. 4 ?3 s- n. N' _% m
  328. void CRevAppApp::ClearAll(void)& `, z6 h; F5 n1 i
  329. {
    4 X9 ~8 L: H$ v+ E7 ^' p
  330.   LPUPDATEFILE file;5 C! ]- S  ^, D8 A* V4 f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! v9 G- G  p* T4 @

  332. # ^$ b+ i) L- a7 H/ B
  333.   if(UpdateLocal.size())
    7 L$ ]) o7 W$ j6 i# j
  334.   {- b: k. m7 v! M/ b2 I. h1 E$ \
  335.     UpdateLocal.clear();1 Z; o. j5 m4 E) [6 v7 [
  336.   }  S$ t5 G' {- n- y+ v
  337.   if(UpdateFile3.size())  U5 H! ^! j7 A* N2 f
  338.   {4 A9 z. A* t6 x! P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 Q, d5 n% G" N3 p: `
  340.     {
    1 B+ A2 g' M2 W
  341.       file=(*p).second;
    8 [4 z6 f4 Q5 c: k
  342.       free(file);6 [0 E0 x* C0 l- Q" g; {2 }8 k
  343.     }) [8 j3 f7 K8 K( `) u( L
  344.     UpdateFile3.clear();# v4 z- c5 t! M6 g, d
  345.     UpdateList3.clear();
    8 f; E9 c  b6 Y" M4 |$ o
  346.   }+ Y" G  E6 ^4 J- N2 u
  347.   if(UpdateFile2.size())
    9 G) J9 ~) O3 G! h( d: I# U6 i' ]! p
  348.   {+ w  h, `' T  n! Q0 }
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 i; d# m& A) T2 u. i7 E4 h" F! B# a
  350.     {
    / Q; w" J* m# Q
  351.       file=(*p).second;
    " `, m' n0 o0 b0 g9 e' m* _
  352.       free(file);
    4 F4 W" [: e0 y6 `, j
  353.     }4 m# Z. v6 s- C
  354.     UpdateFile2.clear();6 D, g( M( \- C( L# F$ k
  355.     UpdateList2.clear();
    & _8 A9 ~* ^9 `9 ~2 O5 g' F
  356.   }0 z- L2 B- D8 X" q
  357.   if(UpdateFile1.size())! \2 Q* ~7 n! u1 t' i
  358.   {
    8 V5 j" H! r  D/ o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 o2 @6 J8 R/ x: L1 M( K
  360.     {
    6 A  B  E1 q8 z' A
  361.       file=(*p).second;+ s# P( M7 k) w2 C
  362.       free(file);( j4 \& B9 O( B" {9 c0 x
  363.     }
    8 F* w, W$ |# `& R( n1 r3 X
  364.     UpdateFile1.clear();
    , `1 Q4 K/ k6 b. v) }6 F) L( t2 \
  365.     UpdateList1.clear();
    # [! B. ~7 q/ G$ N( E2 C
  366.   }) m: D2 j, @# y- [
  367. }  
    / y6 J/ Y) K; g0 a3 Z4 U
  368.   ( O. B' s$ ?9 L4 q6 g; p5 w  g4 \
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    : M: v( Q$ C, i2 T" b0 ?6 {
  370. {0 m, g% y( J7 N$ c5 F# [" w
  371.   int c;7 I+ s6 G% ]4 V1 _
  372.   LPUPDATEFILE file1,file2;
    ! v0 h4 w& B% u6 [3 [% I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' L. x: C" v9 J/ d' v
  374.   std::list<CString>::iterator l;
    ! ~; |+ B  k/ c8 |0 l+ Q

  375. 2 B7 L* N* ]+ W) D
  376.   UpdateLocal.clear();
    ( n: @$ D$ w) }1 |$ {% u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( Z; Z6 w5 a1 R# @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 B5 V/ B9 f9 A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , v9 L' B. I1 f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- @4 a2 p, M$ o( r8 X3 b  ?1 I
  381.   if(UpdateFile3.size())! F) u5 ~) {# ^! n
  382.   {
    9 c: l  L  Y# c
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); p  V$ n, t# C# s- G
  384.     {
    0 ?3 D! T/ T& Z$ I
  385.       file2=(LPUPDATEFILE)(*i).second;, \: \; Z: J; T$ Q) g' e, P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 _8 }- @4 K% k1 L5 S  C& j9 t" w
  387.       {
    , g% ]9 }/ C5 U6 \2 K9 b) y+ h
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 C. ]- Y+ e* F* h% G' T5 h
  389.         file1->vers=file2->vers;
    $ c" B4 u0 C4 |, O: h
  390.       }
    6 k& R( h5 l% l. G6 n
  391.       else2 \! Y/ p' i6 a% R$ z- o( o  y/ Q
  392.       {( M% ]0 [8 w! \7 o- {' |6 S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 u+ q+ V/ H" S' V! V' y9 y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));$ P  K) O6 J& T, w3 {: H+ Y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 t9 j/ E: }8 y1 U, V# J4 V
  396.       }
    0 Z* l8 t2 P8 v% p, U
  397.     }
    5 u/ x1 g$ a; l
  398.   }
    & g3 e& O6 f% l) y: P* b: L1 c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 F% r" K& b# W4 q/ x( F7 G
  400.   {# D9 r* o  S. K9 A3 }( m/ N$ b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 i- r& Q; x3 P
  402.     {
    " q$ B4 f! l! `4 }0 `5 D" R
  403.       file2=(LPUPDATEFILE)(*i).second;! ~# N) i1 x& a* |7 K9 l7 D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) n* u  r# x" u  L. {" N
  405.       {5 E" Z8 E$ K) ]6 L( @: N6 Q
  406.         file1=(LPUPDATEFILE)(*p).second;! C, W8 s0 Q, Y6 H
  407.         if(file1->vers!=file2->vers)
      H6 ?3 x/ Z6 d: G3 E
  408.         {
    ( a5 }8 P* L4 y  f. m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " |' l- p7 ~2 d0 {
  410.           c++;+ w  l' [( l) P# E5 J$ f6 Z( n. z
  411.         }
    . W; w) b% Q' D$ P2 \. Z* q
  412.       }# p7 u6 S1 P+ {" F$ X* l3 u
  413.       else" S" ?2 l) b, d! H$ }8 o; L- ~
  414.       {
      n4 {# s8 ?: m- f  ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) n" l8 \1 u0 c# I
  416.         c++;
    ( \" c  b. d# }  E, J
  417.       }& o3 Y' O' q- a$ K- \
  418.     }
    ! n+ }* b3 u9 N7 _( ]
  419.   }
    4 J5 S; I) J6 V* R4 o" R8 U' j8 }
  420.   unlink(".\\DownLoad\\update.txt");
    4 z% W! O3 G  z& v6 b* f
  421.   if(UpdateLocal.size()) return TRUE;
    - d  k$ ]2 c7 E# [' a( U1 w
  422.   else                   return FALSE;
    4 F$ O0 |8 `4 @4 X) y
  423. }+ J- p: c; `; v
  424. 9 h( z9 t% J) r' ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"6 B8 M8 S1 W6 o+ A3 ?0 c
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ d2 B  u% n$ O6 z
  427. ) d) H3 H8 V$ Q8 e, f( C4 r5 `
  428. % d2 U( C3 A% o- [
  429. 0 O1 [# l. q; q0 t# A* R+ `+ ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 A/ S; A) B  ]. {3 e# ]4 H
  431. {
    . m* \+ D! z/ [; z8 [1 B# O, H
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % Y: d7 Y* \; [; h4 t
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ t( h$ s& h+ c/ P4 |/ t! W# ^. E" b
  434.   {; R% a/ q! f7 `/ C, \
  435.     char szLanguage[50];
    / x, |, C, O7 _$ H7 N2 ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; I; V3 a( F; [( L) {$ |3 Q+ b/ j
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ z0 E. O) O7 i% b( l1 N# \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' B6 c. z. Z- m8 b0 {- }
  439.     else                                   m_iLanguage=ENGLISH;
    # V1 w$ E0 g" h- Y
  440.     char szRegister[100];' p" e; U" k1 C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % B% I0 i  W5 F+ l
  442.     strRegsName=szRegister;
    ) g1 m! R+ X2 i
  443.     char szPatchURL[100];
    6 ^( I- ^+ |0 @3 S0 U9 [! t+ m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 |. o( r' ]9 k1 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 F6 ~; Y+ x: G/ t
  446.   }
    9 ]+ K6 h) R% A. C: z8 b, o
  447.   else* Z& t% C+ }+ O% m
  448.   {$ B$ y- }; {. n4 M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # R9 y# u  I' s/ y; x  E$ D
  450.     strRegsName=DEFAULT_REG_URL;6 E  G, w4 m" e
  451.   }$ y6 L' o* @7 p# r; {
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 }; ^0 a' d8 w' W7 D
  453.   {
    ( J+ _* E* ^$ S2 q* @6 {
  454.     char szIP[50];. L: _6 R  T: C1 }! v
  455.     char szDIR[300];' b: a5 Y# ~4 d  n) d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 Y. g( o+ j& s+ D7 c& h
  457.     {* U3 e1 A. b& `8 b4 d( [; ^- W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 f) h' X4 B5 }; G7 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# @8 v: J( l2 ^6 |1 U
  460.       strHostName=szIP;; Q  T3 ]4 H0 J. Z& G7 C' w3 c
  461.       strHostPath.Format("/%s",szDIR);
    $ ?  }! |/ L1 I* }
  462.     }
    ' e/ F% y1 S& P( f2 J
  463.     else  |( f2 \6 ~* M, v8 {
  464.     {
    $ y6 ?' P/ m! c9 q" @
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 D( X; p! Y$ p  e& x3 W7 @% ?: \
  466.       {+ D1 [; K$ Y9 I
  467.         char szLanguage[50];0 U5 F1 }4 z  G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& a4 z) L0 m, D
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ C6 B! q( X! ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 r  j$ p1 C: q' h
  471.         else                                   m_iLanguage=ENGLISH;* t8 J  t, e) b" k6 M& _4 ^* s
  472.         char szRegister[100];
    + M$ }$ I1 ]. r3 H1 O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 e% G0 h* B4 j# C  H. X% {: X3 d
  474.         strRegsName=szRegister;) e, \6 B5 A: q: q
  475.         char szPatchURL[100];
    . N) Z; E5 E* i8 n' O% r6 S, t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 @  f* F2 V& a# H9 x
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      M# ?  I/ G, \+ b! T
  478.       }
    4 Y$ O' M( b* w1 u. a/ c
  479.       else
    - v/ b+ W" R* k/ j
  480.       {
    " B( o* K  d2 G; Z6 V! A$ E2 O5 k3 O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 {0 Z8 e, {/ O5 a' x1 H
  482.         strRegsName=DEFAULT_REG_URL;$ R& t" N2 Q# B% U7 G
  483.       }
    ( E6 |# U- s7 ~9 Z
  484.     }, R7 |: t+ U0 v& X
  485.   }7 u$ F/ V2 Q( U/ C- A2 Y
  486.   return true;; l9 a& n9 g9 q$ c) I
  487. }+ L2 U! E/ |3 [9 u! K

  488. ( P. X0 m, E6 o; X8 G, z
  489. #include ".\ZLib\unzip.h"4 J6 s/ ^. O8 L$ A& i. y4 x8 U2 p
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( h7 z. ^. `: [) }$ l2 y
  491. /////////////////////////////////////////////////////////////////////////////5 f& @; {6 R+ ^9 @
  492. // CRevAppApp initialization
    . b7 f. y4 `5 H7 J' z2 d3 u
  493. 5 g1 ~& f% s4 V1 ~# l! ?! Z
  494. BOOL CRevAppApp::InitInstance()
    * a0 Y. H. t3 U) }
  495. {0 I7 K, S( G2 k- f/ X3 b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) ^1 E! e0 o! x" L5 m

  497. 2 H4 F4 a, X/ {; e5 `3 j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + {4 _$ ]+ o# \/ R! L6 b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 `  w; U0 y! J1 b& |- H1 {& w
  500.   {
    - u6 v% @' w8 y; w8 u6 O- d
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 u- a9 @( u# f9 f  H0 e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 o/ h9 C! m5 i2 x/ s$ p! |! K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 u% d5 [3 C6 d8 i% S
  504.     {
    ' v& q! E$ A8 ?$ S9 p) h
  505.       strcpy(szPath,szPathTarget);5 M* z* J/ P+ R$ v
  506.       SetCurrentDirectory(szPath);
    5 Z7 ]- ~9 h1 X% r. o9 T' S6 T
  507.     }
    ! D9 q7 m; @; t" o$ C" v' _# G
  508.   }5 u/ B1 [2 V0 R# D/ @
  509. #ifdef _DEBUG: ^, {1 A" w7 g/ g' B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 H& a( r) s+ n) @; P
  511. #else
    3 @/ S6 V1 B) y; h- H2 @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % {8 w( V! O/ P7 w9 W
  513. #endif* X" g1 }* m1 r# w
  514.   {! Y6 f2 S7 Y% U& f; F
  515.     char tempFileName[MAX_PATH];
    + G" ]8 C) a% d6 \; N9 a, D
  516.     strcpy(tempFileName,szPathSource);8 S  B! t& Z, I
  517.     tempFileName[strlen(szPathSource)-12]=0;
    3 [$ h$ @1 E. r" M& H. M7 X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ u" U% A* ?  G- L# I2 C4 J2 L) z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  |, `8 f. v- k7 f) {/ G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& L  d3 O3 E! s7 v& y- p
  521.     return TRUE;
    / F- w7 T* g/ r- U
  522.   }  z% ]' F* U' {* l6 Y& w; z
  523.   // Nuke 0118: Delete run.exe
    $ N2 v$ t6 o# J5 t& I9 e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ X$ Y6 @, |' b9 Z, X; s- S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + G* V4 G8 T5 d
  526.   if(!ReadCfgFile("Config.ini"))2 P4 g+ R; q$ ?/ X' O
  527.   {3 n$ o) i3 Q0 m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 z. G# Y, I" x1 H, ?
  529.     return TRUE;$ B1 b1 e: N8 ?7 @2 m
  530.   }
    ! P0 l5 ^' F. O' R9 X8 A
  531.   HANDLE mutex;
    / i3 i' S/ L: \9 n; ?" T6 h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) X8 t  C9 l0 x4 Z) T* R
  533.   {% p  S+ Q$ s; c: |8 k: P9 `/ u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + ~# V& g8 P) R: F4 w
  535.     {- E1 F0 J  l  F6 b$ p1 ^% [% \! k6 E
  536.       CloseHandle(mutex);7 M6 Q6 s7 s8 ~& ?0 S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ m$ R7 v; \8 \7 ?, \5 x: H9 S
  538.       return TRUE;, }0 N7 B, y1 v( D' C( X6 m3 C6 i
  539.     }# |1 S- L/ {1 [2 t
  540.   }  
    - d* m' C) _1 [7 [
  541.   CloseHandle(mutex);( `+ x3 K) R/ R/ i9 |

  542. # p! K7 K) i$ j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    5 u+ ]: ^* ~% ^1 P% k6 j
  544.   c" q& G2 {# `- P. D
  545.         AfxEnableControlContainer();
    / u" D# x$ @( F
  546. 7 @$ ~* K" W2 J
  547.   bCanUpdate=FALSE;
    ( j+ ]* n2 e* T# }
  548.   dwStartUpSteps=1;
    8 t4 K* r, ]2 }2 Y, M( \
  549.   dwProgramState=AP_NOTHING;8 D6 T& Q! [! ]
  550. , e. Z8 ?, S2 _, y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & L0 h. ?6 M0 M, I% X" P0 u" U! {
  552. / J0 R% _% Q$ D) ]/ Z! {3 M, b
  553.         // Standard initialization
    5 v& v2 z: T' c' d
  554.         // If you are not using these features and wish to reduce the size0 q0 c% W) a8 `  y! Y( z) ?" ?
  555.         //  of your final executable, you should remove from the following  J% _3 [# |+ o
  556.         //  the specific initialization routines you do not need.$ u6 _6 l8 G* j8 O- x
  557. 6 B0 \5 \, s+ U
  558. #ifdef _AFXDLL
    # e  Y& N6 Q6 ^: E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 n4 c- ?2 c; @, c! G- A
  560. #else; c2 t1 M: g; ?7 M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( Y9 T- L4 d- Y2 Q2 R9 a/ J
  562. #endif5 D8 ~# s, b0 f  H9 o
  563. 9 _, ~6 a3 ^; O$ Z9 t, c8 [4 S
  564.   dlg=new CRevAppDlg;0 Y0 a# C4 g  U4 H- y% z5 Y' x$ t
  565.   dlg->Create(IDD_REVAPP_DIALOG);& T7 Q! d2 f, e/ r. M9 w" i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 n# e3 ~2 L8 G* b* t0 K) Q+ ]6 e
  567.   m_pMainWnd=dlg;4 v6 b4 L/ d4 @' _0 @1 u& L0 K

  568. - c7 v5 B+ E2 l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 F; M# h6 u3 L

  570. , u+ Z9 \: y6 ]& Q
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % ?2 Q) b# N. c" h5 v7 `8 K
  572. //  ULONG_PTR gdiplusToken;
    $ ~% F9 y! O- W9 b3 x" r+ U& N: ^* Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 j+ A% E1 J' [$ C9 _
  574. / {8 D, Y7 H4 l; U* M/ _
  575. //        CRevAppDlg dlg;
    2 U. A; I# l& t+ A; \
  576. //        int nResponse = dlg.DoModal();
    ( \" s5 P6 ^( E4 S1 p
  577. //        if (nResponse == IDOK)
    * L. g# d; \- A, {# e
  578. //        {3 P+ R; ?' D: x" p9 ^
  579. //                // TODO: Place code here to handle when the dialog is0 ?0 e) R# @7 l0 C$ Q: D5 A
  580. //                //  dismissed with OK4 k2 c8 T+ J$ Z( A2 _! |' o! s
  581. //        }
    ; k- x( A9 L, g% @8 d9 F( ?: S
  582. //        else if (nResponse == IDCANCEL)
    ( R, T0 f# p6 O
  583. //        {  K3 J4 d! W; [
  584. //                // TODO: Place code here to handle when the dialog is
    - }& i6 x% n! j7 `8 t1 j
  585. //                //  dismissed with Cancel
    ! K: c" N& Z1 S# w/ `
  586. //        }: g7 C; c7 @& _4 D
  587. & A9 [! F, V" s* Q, X
  588.         // Since the dialog has been closed, return FALSE so that we exit the  g& z: A6 K0 W2 D( T, o. X) [
  589.         //  application, rather than start the application's message pump.
    ! k2 T/ s1 \& o  K: W$ ]
  590.         return TRUE;2 ^# p1 v+ n/ t
  591. }
    2 Z5 ?" Q9 M- m5 V* O

  592.   {' f% ?7 D& e+ X
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* M! C7 E5 d. a4 I6 \7 u; I& ?
  594. {
    2 ]  E% V% X- W  b6 u
  595.   int i;
    3 ]* ~, b( ^0 ~2 R0 @2 G
  596.   char *szRet;" \& n) i" v& s+ i# U

  597. 2 W: F$ Y! p8 j9 w: y; C! n
  598.   if(pSource) { itoken=0; sztoken=pSource; }; D5 z$ z, ~1 R* ~- K
  599.   if(sztoken)2 h1 [) |4 K' ^5 }
  600.   {# }! W1 a0 ^- a
  601.     szRet=&sztoken[itoken];
    0 C2 `6 S/ X& N: C
  602.     while(sztoken[itoken])& N' |6 s. U9 T5 V9 R* U' G) P( }0 z2 e
  603.     {
    9 v! n+ U0 ^& W" a3 S
  604.       for(i=0;i<(int)strlen(token);i++)) V1 A& o1 w; z# a3 A
  605.       {
    1 [& X( ]8 m0 j4 E: ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * z& B5 k+ y9 `" ^
  607.         {+ f/ F+ b$ G: d& J
  608.           sztoken[itoken++]=0;
    & I' ?$ S9 {7 ]* ]- Y. T$ H. q
  609.           sztoken[itoken++]=0;8 n8 C- O3 e9 c/ N1 {3 n
  610.           return szRet;
    $ @2 X- n  `9 J7 O9 @4 w. v
  611.         }& W: T! l  P; J. P" N3 b7 d/ X
  612.       }
    ) a# u2 P7 {7 z. A5 C) {2 e. ], b
  613.       itoken++;
    % ?+ P9 Z$ x4 ^8 ]3 [; m$ G
  614.     }
    8 w# w4 Q1 E; _$ @
  615.   }; v5 Z/ S$ @5 r
  616.   return NULL;
    1 U  s3 r: r5 S4 |
  617. }0 E2 S! y' C) O9 F+ @5 s* P
  618. . \, j; D& }3 N+ e" M6 e1 g
  619. void ProcessProc(long Total,long Current)
    $ ^- z% O: X: {: M
  620. {
    6 U4 ~. o$ _: \
  621.         MSG msg;: ], ~' w6 b3 j3 C" }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ! ~- o! h6 T+ x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    5 e3 |9 |/ R$ l3 F: n& [9 L3 m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& T. x' ~8 x; w
  625.         {
    % p2 W5 a5 D; k$ M& q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : z0 W( t5 Y0 z6 D) H
  627.                 {; t, A) Z) h# Y9 n
  628.                         return;2 a$ R% n) T4 j4 [% y( m
  629.                 }! ?; E$ p4 O, ^7 I
  630.                 TranslateMessage(&msg);) s3 u# i' A, p4 ]$ ~  T7 J
  631.                 DispatchMessage(&msg);. m. b3 ^; ~: G6 e
  632.         }       
    5 K3 U# d6 O' l
  633. }% C4 }7 `& R& ~/ h
  634. / ~* O/ P+ i2 ]8 A# m" b
  635. BOOL bFirstChar=TRUE;
    , i1 x- f; @3 L

  636. ( ]. Z2 f2 a( m' X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! _) m$ g; f: e; `
  638. {
    $ M+ }3 f; J1 l5 _* d# \2 s# s
  639.         // TODO: Add your specialized code here and/or call the base class7 [$ B9 D: n1 L% S
  640.   switch(dwProgramState)5 a2 N* d* S: J7 ]2 A
  641.   {
    ( ^, Y  }% i0 m
  642.   case AP_NOTHING:
    6 ]0 }0 l# z' U' G' g
  643.     switch(dwStartUpSteps)( l% M& [3 t3 F1 l& z' Z, E
  644.     {" z' R; ?9 `; t
  645.     case 1:
    ' o; u# y) d6 `; F# o
  646.       {9 g: w$ F7 k) N! D: w" z" b
  647.         int i;% {4 R2 _1 R' `2 X) d
  648.         CDC *pCDC=dlg->GetDC();
    ; H8 X( f7 l/ b. q; l, }
  649.         HDC hdcwnd=pCDC->m_hDC;
    . |" J, S) E  V& W
  650. //        Graphics graphics(hdcwnd);
    1 C: X% E2 M9 H; O* ~2 W$ u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 M, U( M1 U6 f. B" y. B
  652. //        INT iWidth=bitmap.GetWidth();
    - T7 D: E- h) V+ t7 m2 L( i7 J+ z, ~! X
  653. //        INT iHeight=bitmap.GetHeight();
    8 ?! A7 ]/ B. V
  654. //        Color color,colorTemp;
    - G0 D$ @5 U9 u2 |- y4 @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , V/ H. N) D" D) l
  656. //        {
    * A; a  ?0 X6 O. {' L$ c" j) _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) U) b6 ?( U7 e$ N( t/ D2 g
  658. //          {/ R2 O$ U% n( T! n- N& T, b# G" ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 w8 L# I7 Z/ `: E, c! N8 F
  660. //            colorTemp.SetValue(color.MakeARGB(0 J, y8 _5 s% g( X0 U
  661. //              (BYTE)(255*iColumn/iWidth),
    - m8 K7 ^0 E6 t3 {! _4 R& i
  662. //              color.GetRed(),5 X3 i0 r* p, n2 r
  663. //              color.GetGreen(),) F* b/ V& V4 E4 n0 c
  664. //              color.GetBlue()));
    6 c- p( U6 m' X/ c% T6 [
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ Y9 x5 y: D. f9 c) {. a
  666. //          }, I1 U) V1 _: G0 ~4 M! B
  667. //        }- `0 U& y( C- V1 L7 W3 a9 C6 ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' U( N: a1 S% u& Z2 L: p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) s( r; m1 x$ [. ?$ y8 S( o; {# N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) s- O3 Z7 r7 P! f% z. e8 A
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 B; d: O( a9 H! a" \* g8 I
  672.         for(i=0;i<240;i+=8)% g4 g/ T3 |+ v' h. u
  673.         {- }1 l: i- v1 B! B# w  T/ H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; @9 j% F1 c3 Y" {  {6 @( `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 A, ~# U8 Y* ]; G! s! |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 k3 \) ^/ T8 H) `; r
  677.           Sleep(33);
    % G8 B: ~7 b/ b, J. _- R3 {
  678.         }
    " w$ o8 L/ I4 q, ?( ?# ]+ b
  679.         Sleep(1000);  Q# B, R% U0 L3 N, X4 b, p
  680.         for(i=240;i>0;i-=8)" E  E8 J/ G' q1 E( X. v: [2 h
  681.         {
    " N" x3 u8 u# \4 X2 C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 y# i( }# d+ |. |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 `2 L7 {. Z$ E( T# S! `+ o0 s$ n% w7 L0 U
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * ?1 p# o, ]3 b8 X1 G
  685.           Sleep(33);/ i/ t, h7 F+ k# u5 f' S
  686.         }
    " ^( x5 @% o- k1 M* H$ |7 z: g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; Q( D) {: m+ y% b2 B4 M
  688.         dlg->ReleaseDC(pCDC);$ ^' c' f% M5 [5 f) B* l1 W, \( K
  689.         DeleteDC(hdctar);- p( T0 u: i6 C7 E2 o
  690.         DeleteDC(hdcsrc);7 i' ^( B2 A' z5 @% Q5 u$ K. o9 K
  691.         DeleteDC(hdcorg);
    8 {' ~  ^' A3 |! p3 T2 ?
  692.       }4 j$ T$ s7 O' j% a, b5 R  S2 B& t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; G8 d' h( G: K' Z8 ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 f$ o) W# J' w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! o  g# s# |6 l% \: Z& `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& Y% Q1 E4 J; a- x
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 U  j1 Q; p: X, M/ ~
  698.       if(!Dn.Connected())  e1 z. u& L& O, ~# n% @# I: |- e
  699.       {, q8 \! R% n6 A1 t
  700.         dwTotalFiles=1;
    8 \- _* ?  s, W/ X3 D# r7 I
  701.         dwDownLoaded=0;
      }; _) p& i+ ?- R
  702.         bSilentStep=TRUE;
    8 G) y  M) }4 j
  703.         bCompressed=FALSE;9 C2 [/ Y& s) Z) s
  704.         strExtLocal.Empty();
    ! |# i0 j3 c5 g4 S
  705.         strFullName="readme.txt";! K' l. T! G* s3 t' b# c
  706.         dwProgramState=AP_CONNECT;
    9 t% l* R. Z1 j$ N3 a6 {! P3 N
  707.       }5 y2 s0 {. h+ M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    3 b! \# Y9 c2 ~& w
  709.       dwStartUpSteps=2;% l0 A& a% ]6 G/ l! t& D7 E* n5 W
  710.       break;& R: T5 j- q/ B  M- W  c6 L
  711.     case 2:
    ( ~" ^2 O. T: D: A6 C/ h0 L. O
  712.       {
    & W9 E/ b! H$ V6 E* A# r
  713.         int iEOF;
    : N+ ]! C5 O6 t' u$ s7 z3 G4 X
  714.         FILE *fp;
    ; p% J6 m8 s+ C' [
  715.         char szString[512];
    ( m: q& C2 G, `9 n% D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    2 Q! Q3 a( O" d$ S. i! Y0 q/ a6 h6 [
  717.         if(fp)
    0 O) \. n( d7 b- u0 s  D" W
  718.         {
    1 M; m# O" F' U! Y. X9 B1 o
  719.           do# a9 e0 O, w6 a, E% \( d1 r
  720.           {
    - S! P4 U* B/ e2 a
  721.             iEOF=fscanf(fp,"%s",szString);
    + S- p* g* b2 ?9 K3 R. d- L) {
  722.             if(strlen(szString))
    - {5 P, R2 z, j% P) L8 ~
  723.             {
    3 V, w! V! \2 T4 C* K- d6 o
  724.               if(bFirstChar)9 L' s# G  k3 X" E9 f, n) [
  725.               {: v+ `, ]; J/ w4 P+ P
  726.                 bFirstChar=FALSE;
    4 d: M" E! h" s! Y
  727.                 bConnectIsBig5=FALSE;7 ~2 O0 N% `3 S2 W3 s! s1 f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 b0 k& @! D$ L  b) r
  729.               }; G+ N2 l- [7 Y+ `7 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 U% V; T7 e7 E9 x1 T1 m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # v: [% L6 a% Q/ b4 S1 @2 F
  732.               dlg->m_ListText.AddString(szString);
    ) E: `$ {0 L4 A" c9 r2 f& J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & W' C2 m" [0 `0 D) m) F5 C
  734.               *szString=0;% t" y7 T! z; C8 |, U3 w4 `2 m, b
  735.             }" z5 T7 I$ C: M1 O/ U- z
  736.           } while(iEOF!=EOF);
    0 ?4 d; v4 B# I3 K# d, W8 `0 Q
  737.           fclose(fp);
    , w9 n, g( a: r" A
  738.           unlink(".\\DownLoad\\readme.txt");2 X! C9 f# J0 d( ~9 Z* L; y% f
  739.           dwStartUpSteps=3;
    ; [$ P+ S- v7 g$ T
  740.         }- O9 W- m+ ~2 D% s0 b
  741.       }9 M) p4 ~/ K6 X; j, T# C' k
  742.       break;
    / I! a) x9 y) Y# m1 Z; ]3 C8 C: Z
  743.     case 3:
      N9 J! Y. Q+ u' j, C* f
  744.       if(!Dn.Connected())
    1 E! p  B4 v/ {$ \
  745.       {! [7 X0 R/ @" G8 s0 Q  g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* |0 i* X; n& G8 P4 c) b
  747.         dwTotalFiles=1;; Q/ ~5 Y/ Z* c' T6 }& z3 W
  748.         dwDownLoaded=0;7 H3 D' J6 L1 w2 Y) E5 v
  749.         bSilentStep=TRUE;9 K2 b: N5 i9 @/ @
  750.         bCompressed=FALSE;: g6 ^+ t* a- O
  751.         strExtLocal.Empty();9 d* Q1 G1 ?) v
  752.         strFullName="checkversion.txt";
    6 z* o1 z# b" H: ~- |3 d; o5 N3 G6 F
  753.         dwProgramState=AP_CONNECT;7 I8 r, C0 O* X5 s) l2 @1 F8 k$ {; }
  754.       }; p) Y  w+ D0 W" w- C* B* |6 `
  755.       dwStartUpSteps=4;
    " [1 L# v  Z" T
  756.       break;
    $ K+ c* w. G+ x, A# t
  757.     case 4:9 O& X/ p$ C  K+ h* Y" y
  758.       {
    6 @- b) y5 \+ m4 A
  759.         FILE *fp;
    ) u# m  G) u! b' f) t- b% I$ c( I
  760.         char szString1[128];4 ]7 j  ]8 K# T$ m
  761.         char szString2[128];" f/ s7 U) f8 i% x2 V# I. {
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 v% N3 \2 b) c; E: J8 x
  763.         if(fp)
    4 `- [1 a, y% ~# n. _  s% f
  764.         {
    4 t, ?0 v" a/ J: [# y
  765.           fscanf(fp,"%s",szString1);
    ) B0 c& s! a; Y( B0 s, R1 P% z
  766.           fclose(fp);- s5 H* L& Z* K) L: I0 i& b, {, X% b
  767.           fCheckVersion=atof(szString1);& ?9 \3 ~$ f0 _  h5 y, O
  768.           fp=fopen(".\\checkversion.dat","r");
    & T! Y6 _0 y0 b, c4 o
  769.           if(fp)( [/ d# s* M2 z- h8 Y) r3 v1 l
  770.           {
    % }8 p* w0 z/ K+ e. k3 l
  771.             fscanf(fp,"%s",szString2);5 `9 k& u3 F1 p' I& `+ p$ Y8 c
  772.             fclose(fp);0 ~; L/ i% U0 M
  773.             if(atof(szString1)!=atof(szString2))
    $ V6 `) o+ P$ `) Q
  774.             {( k% z" A' o7 \
  775.               if(!Dn.Connected())6 P& b/ ?  \" {" x1 X/ z5 x3 d
  776.               {
    6 f  p+ o4 }0 b
  777.                 bFirstUpdate=TRUE;2 z: O% D, ^+ r) A) C$ `
  778.                 dwTotalFiles=1;/ n7 g6 H! {8 h: l, L0 D" q- v
  779.                 dwDownLoaded=0;: h" H9 h! V& }( h/ L& p
  780.                 bSilentStep=FALSE;
    4 \6 n7 ^# N9 y$ n
  781.                 bCompressed=TRUE;
    $ [) @  q. b1 H. `- |" c' K9 d
  782.                 strExtLocal=".\\DownLoad\";
    ! n6 b2 s0 K, J! [; M) b
  783.                 strFullName="update.txt";
    & r7 l6 Q! Q* L
  784.                 dwProgramState=AP_CONNECT;
    + d; d  X: l) u% i: q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - I, c0 q* o( ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ M) U. p' J, z- p
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; p$ [7 V# y; E0 f: W9 P6 @
  788. 4 f  k" K; }' q1 t' I9 S* I; G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 s  B* k1 o  K" f
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ u5 k6 F- G+ f9 y) {
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) B2 _; }+ o6 ]# M! ?% y
  792.                 {. ^2 _# @) S9 \: p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ o1 v+ u2 M1 a' z' n6 [9 {3 B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* }, e& {/ z: D0 @( Z. s. C- c; P: V
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ i$ m3 h9 [2 d$ l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: F  A" G; r# s8 ?% M' v6 d6 u

  797. 7 S3 A8 B$ Q  R! i% m8 K
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* o! S8 l) K! a0 u7 E# R* J6 i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 w* w% K- k1 o8 a) C
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : Q7 Y& g. S* ?& K* M! _5 R4 F2 N
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ F4 ^$ k9 K  V$ l3 e; L
  802.                 }! S, J% ^2 T; e
  803.                 dwStartUpSteps=5;
    4 ]+ E. ?( ]5 K4 R; ?
  804.               }
    3 H8 c7 Q7 H2 `, `1 F4 h
  805.             }
    , w7 R; t& Z* q' _3 x- B
  806.             else1 m+ Q+ V9 ~. S' Y2 y( q
  807.             {
    3 l' T3 d0 B- o0 \! b' P
  808.               unlink(".\\DownLoad\\checkversion.txt");2 F8 c: F+ q8 {7 R% d: E
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 D- v" n  c" L8 E' j
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - B# t" z  I: m) b) A2 ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 G8 e& z# G' ]: q$ q5 i
  812. 3 n, z6 Z8 w/ |0 M0 g! j: o' [9 ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 r$ y  P$ ^4 w3 ?/ {/ v. U
  814.               dwStartUpSteps=99;- G# a9 b. r  L/ h6 {9 c
  815.               bFinishUpdated=TRUE;& m6 Y  b; t% P! v/ Y
  816.               bCanUpdate=TRUE;; i* i' U  I$ V" n
  817.             }' d) l3 U* Z1 Q
  818.           }* ?4 J$ S9 z2 S9 t2 N8 a
  819.           else! |& T/ t- B: R, H. h
  820.           {: f( t8 Y1 @) c' X5 n' ?) P# Z
  821.             if(!Dn.Connected())0 N% Q" z) M5 m! K
  822.             {
    , f5 z* M3 T5 m5 o; u3 a
  823.               bFirstUpdate=TRUE;
    # W$ X; m( K2 h- E+ }
  824.               dwTotalFiles=1;
    : n/ ]) c: C. I, D' X# A
  825.               dwDownLoaded=0;3 r! o) N6 u$ f: u  {  X& ]
  826.               bSilentStep=FALSE;2 t' H0 {. M8 F
  827.               bCompressed=TRUE;, R$ g8 @9 h" u" c3 C
  828.               strExtLocal=".\\DownLoad\";& d+ K5 }! Z' V, V$ y$ h! r
  829.               strFullName="update.txt";( ?6 A5 o3 G+ K9 i; [9 R" S
  830.               dwProgramState=AP_CONNECT;
    & K! `. g1 l* d1 ^. |
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: I6 V7 [( a; Y# V: K" o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! ]1 e6 ?, ^- t. a' }, F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! Q- T% V3 b! r% P- A4 U# v9 c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + {: M: k) v9 a4 m! g% k6 h
  835.               unlink(".\\DownLoad\\checkversion.txt");! I2 W6 i4 b* b4 o% N) m9 N* ^
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) j. q' t1 n7 F
  837.               {
    $ x3 u  j4 Y/ x: I! Y: T. H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * Q! t6 s8 X# ?( i
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & Y8 k+ T( a1 N; U* b4 ?6 m) {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " m, T7 p9 r# Y' D! c0 r& Q1 p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 @) p5 I9 z- x% P- c
  842.                 2 E2 U4 F8 q+ R# b9 q% \. S% C- @4 \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: p3 Z% x* j$ @8 p- B$ G
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 H  C) u; A1 E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * Z, P: F5 V5 L8 l4 L% X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 R8 b0 l! @, k9 f3 v" a) m1 [
  847.               }
    - l6 t1 A/ w  L7 N1 W
  848.               dwStartUpSteps=5;
    6 Z5 j# V9 t, o0 o# Q
  849.             }
    , o+ s$ J( f0 t; C! w
  850.           }
    $ X) x' w: N$ L6 H" x+ Z# C
  851.         }- ?5 K6 M8 J' M; K" B
  852.         else
    ' }& h- g: b6 ~7 v# k: G& s7 E) r) c
  853.         {, L" G" f7 p; }3 v4 E$ k7 L
  854.           dwStartUpSteps=3;6 m3 t! S" @5 f
  855.         }$ H9 p3 i4 c+ a5 O
  856.       }0 e/ ?0 X* S; H5 Q
  857.       break;1 R! p- ~/ n& C
  858.     case 5:
    : q+ l  m! x4 }/ M) K, ]/ T
  859.       {
    3 Q: l/ d, ]0 \* h  T8 W0 u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 r) k- t& e3 m
  861.         {; ^1 d$ @. q0 \% K4 k
  862.           int opt_overwrite=1;: k2 k+ ]2 G( z% J4 J" X/ h6 h0 }
  863.           int opt_do_extract_withoutpath=0;
    4 n2 u# \- M. O, i$ M% g; @
  864.           unzFile uf=NULL;3 t" e6 X: _9 ?% T8 L& j5 ^4 ~9 j

  865. 0 u& e7 ?. O' n1 u% z9 S
  866.           uf=unzOpen("Wsa.zip");: @! I1 u  ~2 J# i8 B
  867.           if(uf)5 ^0 p+ p8 U! a' J. N& L. M
  868.           {8 {$ {9 F# y' M2 L) ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. ^$ R/ u. B9 @! p5 a- a. L
  870.             unzClose(uf);
    . U7 V) q# L* v% b$ S" Z" o
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    4 z" v! m, J5 g* [
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");# J3 _( @' m/ W6 x9 W
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' T0 P* f4 d6 W# R: k4 |* j6 ^0 R2 R
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% g) R& }1 U" j7 U0 N
  875.           }
    ; a- c0 T' H/ A. W0 F0 v
  876.           DeleteFile("Wsa.zip" );
    * n3 a5 V! m+ S0 g: y) {2 Q9 @  P9 J
  877.         }  c- e& ?% Q/ p* z' H8 \

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

評分

參與人數 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客服返回頂部