找回密碼
 立即注册

CSUpdate.exe源代码

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

& Y7 {& A2 [" ?1 t$ x
  1. / RevApp.cpp : Defines the class behaviors for the application.5 P% \( V8 ?, y8 g
  2. //
    + q" Y% |/ i- E6 r; V& G' {% g, n, V8 R

  3. 6 E  |# p( j/ h; ]
  4. #include "stdafx.h", V. |0 [3 z7 h6 _* u- x9 f
  5. ; U% c- E6 t0 S  r
  6. //#define UNICODE
    ) {0 m+ c3 `) u  q# M
  7. //#include <gdiplus.h>+ V% s# g" A6 x( P" @
  8. //using namespace Gdiplus;
    ( r$ E8 V; {/ w( R1 ]

  9. 4 h% i! g: Y9 ~% p& T
  10. #include "RevApp.h"4 B4 p& U5 _6 ]  J4 `" W# b) v
  11. #include "RevAppDlg.h"/ S- y( u5 P1 K9 C9 w1 U
  12. & d% \- H) o# f2 E
  13. #pragma warning(disable:4786)
    8 A' l& v) W9 w3 u5 r8 t' z
  14. #include <map>% W4 U$ \* B: I. d. O2 o
  15. #include <list>/ K) x( l+ i# K1 K. r$ Q
  16. #include <direct.h>+ y" t; f  ^& D
  17. ) z, E$ I0 N/ F; [/ |! h9 z
  18. #ifdef _DEBUG1 R9 T; q/ m8 V8 A) u" O0 S
  19. #define new DEBUG_NEW: O$ ^1 ~0 {9 @: ^
  20. #undef THIS_FILE
    - C; @& E8 C# g/ J3 ]+ e' Z
  21. static char THIS_FILE[] = __FILE__;" w$ N& }; ?. w' i0 O+ _
  22. #endif) c$ u0 P1 v6 U' d+ U  a5 V
  23. #include "SkinResDef.h"6 v  P$ a4 {9 X% v5 I
  24. #include "ChangeBG.h"; L) t1 K3 @( U3 F0 H
  25. #include "AFXINET.H"! \4 v% `7 _& U
  26. 2 ~- k# y0 f5 n& U
  27. #define TRADITIONAL_CHINESE 0
    * }' u+ @- d1 K, p/ z* J$ c0 [
  28. #define SIMPLIFY_CHINESE 1
    % h) V6 \/ D% G) s9 f- V) y+ o9 j4 [
  29. #define ENGLISH 2
    . B0 R  m' B: K) ^5 h
  30. int m_iLanguage = ENGLISH;+ S4 z6 U# L. ~% Q' |1 q" o, |
  31. /////////////////////////////////////////////////////////////////////////////2 h+ h2 f& T! A8 u& R/ P! ^" n
  32. // CRevAppApp
    ; g; Y6 y0 a7 S. C2 [6 z  i2 M
  33. % j- m/ n; z  I4 h- e# r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - q* r+ ]9 P! ^& F' k  T: l: a& y
  35.         //{{AFX_MSG_MAP(CRevAppApp)  O9 e8 n5 A& g* G9 O! T$ C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    $ h& s. _( [4 u) u9 F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 o& W7 w+ u3 ^- r# H5 r
  38.         //}}AFX_MSG( g$ U+ q9 |# c3 r# O4 ~$ e
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" |; n$ I0 w, Q. N4 D
  40. END_MESSAGE_MAP()
    ; c# _# s) i. K

  41. ) j; i+ P' C% n" @- }- e8 i7 n
  42. /////////////////////////////////////////////////////////////////////////////8 F) f% x& c5 \  _5 n
  43. // CRevAppApp construction. V+ n8 p, p0 `! c( P6 g* p

  44. $ S" B* p* k! H0 k2 Q! O+ }8 i
  45. CRevAppApp::CRevAppApp()
    5 I& F" Y4 m. `* Z2 ]
  46. {
    5 D7 q* P" W* P4 g
  47.         // TODO: add construction code here,' w! P2 o5 e1 ~+ G
  48.         // Place all significant initialization in InitInstance
    3 g5 B; J6 f; F# b/ O( M( o' c( k7 q
  49.   bDisplayIsBig5=FALSE;
    1 z# e! |. O$ x* `& H+ ]" X  t
  50.   bRestartUpdater=FALSE;1 C  @% y9 }; r( ?& _# C. ~, ~
  51.   bFinishUpdated=FALSE;
    % }, Q  T, Q8 e$ P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / Y, e( @8 i6 I2 H$ D1 w4 X0 S
  53.   InitChangeDataBig52GBKS();* F! y& u0 f# c( h
  54.   InitChangeDataGBKS2Big5();& I8 E2 q; V. G* Q
  55.         //5 H- `2 S3 s, p2 K" t% x( G
  56.         bClickRunExe = FALSE;1 L: f( p+ ^0 L+ X  @
  57.         //
    7 `% y; _& U" e- U
  58. }
    + g' ^5 ?3 |' A
  59. ( ?7 ^1 X5 `6 _! s9 I; _
  60. CRevAppApp::~CRevAppApp()% L& I# p! a; P, {. A; E: x9 h3 p1 S
  61. {. e: i! _- b9 M8 }. ^* ~3 s
  62.         // TODO: add construction code here,+ z; j( i- p5 k# A0 e% t: ~0 e
  63.         // Place all significant initialization in InitInstance
    6 i, L* b% s, V. N1 e) D' |
  64.   EndChangeData();
    9 p: N( d3 I% ?. Z
  65. }: P; b- v  L# Y
  66. & P. e1 L3 M  O6 X4 P; U/ o3 Z
  67. /////////////////////////////////////////////////////////////////////////////9 W+ N, O- `' u* w0 o* _
  68. // The one and only CRevAppApp object
    3 k# g; w+ `( _1 `; ]

  69. , x3 ~3 r( o) d/ i' B' e
  70. CRevAppApp theApp;" H; V0 G$ g  [% H# u( R
  71. ( v2 _! P; t( j: j; v5 J( U) H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 G+ s( [. h! l
  73. {
    ' v8 c# M6 B" z/ S
  74.   int iEOF=0;& k# {* g: B% `9 M' A( n( I
  75.   char szTempName[MAX_PATH];
    . n1 ^- Q. D0 s" ]
  76.   *szFileName=0;
    / X, u9 d2 N/ f( e! E% k0 J- Y
  77.   iEOF=fscanf(fp,"%s",szTempName);& I: g5 w! W4 D( M1 ]% |# _9 X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    : W, t, f: j: i
  79.   {7 Q$ B$ W. e8 z3 W
  80.     strcpy(szFileName,&szTempName[1]);
    2 N: O: W% }/ V5 [9 j5 G
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), @9 e( X' L' V! c) J- d
  82.     {% y) O0 g2 U1 W+ Q8 D" M* J. M
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 {. v6 P9 ]9 p+ C
  84.       strcat(szFileName," ");1 a5 e* J+ G$ K
  85.       strcat(szFileName,szTempName);
    8 ^" \  R" Z; T9 D5 \; r
  86.     }% w. |; w9 R. D& Y3 \
  87.     if(strlen(szFileName)>=1)& \8 M1 d* S' c
  88.     {4 s4 e, O, ^, L
  89.       szFileName[strlen(szFileName)-1]=0;
    . M. {3 ]) ~8 B" o, U
  90.     }
    # y  l; u0 ?0 M, D. `( o
  91.   }
    ) c' _6 _0 n; I
  92.   return szFileName;
    ; I: h- n) w: ?% l" r% l$ }6 [
  93. }6 {- `5 N( A, |4 u. ]( ~' F

  94. & h9 z) P) [: N0 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 ]' x+ D* ]' T6 r$ ]) k) f8 k
  96. {
    1 ~. t* I+ _0 q
  97.   FILE *fp;
    * E  X3 H) A2 T9 p2 ~- L
  98.   char *key=NULL;
    * w: S  {& D/ u& g, n+ ]$ _9 Q
  99.   char version[MAX_PATH];
    + e9 z; z) N: W$ W4 F& s1 ^$ f, F
  100.   LPUPDATEFILE file,olds;
    , E+ M. o; y0 k& g% j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 z1 z9 ]' A  c* j, O

  102. ; e  }  v1 |  q) P
  103.   UpdateList.clear();
    2 d% p) I/ `: M/ l7 r
  104.   UpdateFile.clear();' E0 o; l; S. A8 F2 w" W
  105.   if(GetFileAttributes(filename)==-1) return false;) s, }. i8 R% z: t& ~& g' I0 E. t
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 n; N: W$ r- u9 H. L2 B' F
  107.   fscanf(fp,"%s",version);6 g& X$ l, l0 a! V- s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ @1 p3 [' C5 P' V# u0 \
  109.   while(fscanf(fp,"%s",version)!=EOF): P4 r& |; `* a0 O3 n, q
  110.   {; v$ H6 R  b8 |3 E9 Y: v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % a4 L4 }% y3 I, x
  112.     fscanf(fp,"%s",file->path);
    4 l& D& P+ @  D) ~
  113.     ReadFileNames(fp,file->file);
      k- s! |. V$ l
  114.     strcpy(file->full,".");
    * n7 u2 B3 B" h1 V8 A6 F5 X. ?
  115.     strcat(file->full,file->path);
    5 o2 `7 p4 K  B4 u9 g
  116.     strcat(file->full,file->file);
    # @0 w3 S. |: P3 u2 M$ `) K, R* u# @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    3 E0 T/ t6 T1 u+ s
  118.     {
    8 g/ t# {- I- x) J( i5 F
  119.       file->vers=(float)atof(version);
    7 |, x0 m' j3 f. _7 W; ^
  120.       UpdateList.push_back(file->full);7 s) c. t6 ?9 v- `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));" k/ [4 C5 }" v" }, X2 r
  122.     }% r9 U& `( e( u" S
  123.     else8 h+ E  _& @3 B" \
  124.     {) k; H& K* y, V" }* k3 ^
  125.       olds=(*p).second;
    . v; G5 h5 }' n  r& o
  126.       if(olds->vers<(float)atof(version))
    4 E% Y+ j6 N4 z5 l+ c8 O6 l, O
  127.       {# ?: `) P. q1 H0 g2 _  F- C. C
  128.         olds->vers=(float)atof(version);
    9 o* s6 t% s' k& [; n1 ?- r: N7 E- l
  129.       }& g& W0 b. {. E  C" d: D3 s# m
  130.       free(file);
    ' Q5 i% x, T: A  _+ ~
  131.     }& L4 X2 w# R2 L$ X
  132.   }5 X6 U. ~  t& s' O  W
  133.   fclose(fp);0 A& ~. C8 k- F9 x
  134.   return true;
    0 L2 a; `  Q- g( L4 u1 G
  135. }
    # _) d" U$ @' `* x6 P
  136. - e$ H& J. h! u; i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . i5 h6 Z+ K( d8 G9 q' T7 G2 X
  138. {
    6 _% J) {' x0 A/ T
  139.   TCHAR  szFull[MAX_PATH];% T) B  i6 |9 g8 Z) f8 t$ X
  140.   TCHAR *token,*inter;
    " i% \  e( q6 c* {  t8 o/ J
  141.   *szPath=0;
    - b- Y- ^  I' G& T7 a+ _$ F, X. q
  142.   strcpy(szFull,szFullPath);( D, @5 x# n$ i
  143.   token=strtok(szFull,"\\/");* }4 @) u. k7 C7 \! j9 D- }1 g* I
  144.   inter=token;$ Q3 o' N- U$ m9 K
  145.   while(token=strtok(NULL,"\\/"))
    ( K$ b7 ?; u! n7 Q' [5 {: @
  146.   {. d* v. L( w- t& n5 C
  147.     strcat(szPath,inter);
      E" C% S! C% H' ~8 j3 h" s8 d
  148.     strcat(szPath,"\");2 I. B3 Z, {2 t$ L$ m
  149.     inter=token;
      i" b' p2 L  R4 @: w
  150.   }% V% C5 Y' U+ m  I4 l5 s0 Z
  151.   return strlen(szPath);  M0 }6 ?  w/ r0 x1 K
  152. }
    # w) e8 \. r3 p' }; ^& X

  153. 5 W  z$ }  Q* ~. }6 G9 {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) n6 ?, J( A+ c3 i3 y2 M/ `! t
  155. {0 w. E/ F, W) v# X' H8 P
  156.   DWORD attrib=GetFileAttributes(Target);
    # S( E+ ~  `& k+ _. [2 [
  157.   if(attrib!=-1)
    , R+ B; Z- F  R+ P* e0 b  v
  158.   {9 w; ~0 W! M4 I2 n; T/ j
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). Y4 Y& t* |4 ~* B+ H6 A- o
  160.     {
    5 d. B* |5 k& W* x6 E) M' I" i  G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : g- O5 S0 t$ K9 K& R! i; o
  162.       SetFileAttributes(Target,attrib);
      r( J4 K* u) W5 s4 J
  163.     }
    ; q2 `  g1 N# n3 Q6 [* K1 a3 F
  164.   }
    " L, M2 V9 T' e3 X. i7 v+ X- x4 F
  165.   CopyFile(Source,Target,Erase);
    3 L9 k4 _: y: n. W0 K
  166. }
    6 w" x6 x( T$ K3 j$ E

  167. $ d; z2 W/ e) p/ `7 \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' r3 [* k6 O- h$ K
  169. {# C* `: n, t/ T
  170.      FILE *fp;
    $ m3 W3 V8 x6 m/ k
  171.      char  szBuffer[8192];# H% B7 U  o3 p; `; j/ `! _, N- m
  172.   va_list  argptr;- a9 U- T% U1 v8 n

  173. 2 p+ ^# v, W/ S, }# X
  174.         va_start(argptr,message);0 u. ^, T; x; C; Z' S' F+ |8 y" {
  175.         vsprintf(szBuffer,message,argptr);
    7 l) R1 U1 U4 R8 l! t1 f
  176.         va_end(argptr);
    - E& ~4 I4 N1 Q
  177.   fp=fopen(FileName,"a");' G7 w& a& t3 |( I( x9 H
  178.   if(fp)& d8 U- F. y! v# S4 j/ v0 u
  179.   {+ v3 v% D5 s$ M
  180.     fprintf(fp,szBuffer);
    0 g- h# x, Q# g( D- U. V7 y' o
  181.     fclose(fp);
    6 U9 J/ N( ^. l1 O
  182.           _flushall();/ N5 j: T: i, q% [( q7 p5 o" B. M
  183.   }: c  @; ^4 X4 ?3 g. I
  184. }
    + H. t) g, K4 f, `! L1 O, Q
  185. + _: V* \3 {. W1 U; w' |
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; d& c% `$ ^. S0 s
  187. {# Y& w' q2 u& [; b6 r0 h0 H& }
  188.      FILE *fp;6 }5 H  o0 i2 T8 x5 U( x# [
  189.     DWORD  attrib;$ D3 c5 p, E# W8 ~: z! \
  190.   attrib=GetFileAttributes(FileName);
    0 a4 G9 V8 Z; A" |
  191.   if(attrib!=-1)% X% h6 y; G  X  u1 \% i' M' G
  192.   {8 w% }* b# d- u# b1 M) L5 A7 F
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- B* C& v) O' I$ o
  194.     if(!SetFileAttributes(FileName,attrib))
    3 m/ c1 q( I  f/ t
  195.     {, k1 l6 D0 l: [/ O. w, Z. t. I: e# I/ A
  196.       return FALSE;
    , F# |3 t0 a& o8 y) |
  197.     }6 L# y  U- C5 b  e4 [- |  |
  198.   }
    4 m4 m3 T. ?5 ]- s& v
  199.   fp=fopen(FileName,"wb");
    ' {, J/ Q. Q! F" O$ S
  200.   if(fp)4 e* j- V2 w% Y5 v, f
  201.   {
    * @9 ~& E4 m9 W  j) C. r6 T0 h
  202.     fclose(fp);
    5 y3 y9 N0 P, j# Q; {+ _
  203.   }0 ~; B0 u' q6 w
  204.   return TRUE;, V" [9 z- Y" V! y" _- r  |2 {5 Q
  205. }
    ( R  J4 Y7 }: n% x3 p) o

  206. 6 b& m- [  @8 N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 w7 I; Z" ?9 N0 N
  208. {) f) H: ]( X8 v* M3 o0 Z4 W
  209.   char filename[MAX_PATH];3 L7 i, @% A+ J) l9 u# k3 g& a8 I
  210.   LPUPDATEFILE file,olds;
    + g% P; h. o  G; ^
  211.   std::map<int,CString>::iterator i;+ E  i" z& ]( V4 {$ b& t4 {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 r7 ]) U6 g3 `  P
  213.   std::list<CString>::iterator l;
    " i/ u! g7 }3 v- }6 [- R  h
  214. 8 m) W( E& G0 p# x) J% \& m
  215.   if(bFirstUpdate)
    1 ?' s- z1 ~0 Q
  216.   {
    4 p, F2 F  ?/ N/ ]
  217.     dwCurrFile=0;
    9 q2 F7 u2 J9 _% E) T1 k( x, y
  218.     bFirstUpdate=FALSE;; d# V; k+ U  w) @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : g8 P$ s+ s' G! b% F
  220.     {2 |6 Y5 X; Z' }2 n( s
  221.       dwTotalFiles=UpdateLocal.size();% a' \# [6 X) a
  222.       dwDownLoaded=0;
    1 `8 p( r' o- P, s! o
  223.       bSilentStep=FALSE;
    2 C. O" }8 J# z+ ]
  224.       bCompressed=TRUE;
    ! A" m9 x/ ^9 m& ?- T
  225.       strExtLocal.Empty();
    7 ~0 q! P; ?- a; E' }
  226.       strFullName=(*i).second;
      S" t" N1 R( s0 |
  227.       dwProgramState=AP_CONNECT;2 E- A. ^* R; f1 ~
  228.       return TRUE;5 b" m  `+ {% {& x9 [  B
  229.     }8 k+ k& C  L8 v+ m5 E' G
  230.   }
    ! U7 S3 X; y, K
  231.   else if(bRestartUpdater==FALSE)% I/ S7 t- u) ]* U4 T
  232.   {
    3 m/ c0 U, b" f+ ]' O  @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      r8 b$ {4 k! S. K0 U
  234.     {- _  i& ^/ m" K
  235.       file=(*p).second;/ G% b/ w/ L5 k3 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 ^, P. ]- ~  g9 V
  237.       {8 k- y/ Y! U- A. H
  238.         olds=(*p).second;
    " j9 D% B) k, q4 Y
  239.         olds->vers=file->vers;
    % }! l2 n: b: d7 W2 |7 W% g% I
  240.       }
    - `' U7 T6 R" f+ S8 Y
  241.       else9 ?: g6 I/ ^. c1 F, K
  242.       {# R3 E2 e& I, Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 ]" Y2 w  K% ?' L3 U) e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) [& ?$ `4 R+ I/ |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% {0 V' [% K3 D
  246.       }
    , K+ p0 I8 I0 q# [" ^
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");3 c" ~' t; _& z3 f' o+ [
  248.       sprintf(filename,"(%s)",file->file);$ r: r# N! v1 m: d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 @* [2 ]( w1 ]' y2 U- x5 h
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ L- x4 I7 ^' F( g
  251.     }; F  I- l1 v' S
  252.     dwCurrFile++;, ]" i9 }6 a# A8 A2 F7 i- q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      n: ?) K) G3 D: q
  254.     {
    : A" r  u* z+ I
  255.       bSilentStep=FALSE;2 R2 {- R0 Z5 ~3 z* @( T5 Q" E' T
  256.       bCompressed=TRUE;
    ) z* i; o# r8 X1 Z
  257.       strExtLocal.Empty();* \! G' }; w8 ]( @$ F
  258.       strFullName=(*i).second;
    * D( P7 s, c& ^, Q- Y
  259.       dwProgramState=AP_CONNECT;
    ; q7 e6 N% ]1 x* x" x' m
  260.       return TRUE;7 i5 T4 S* v! E+ c# z* A
  261.     }, X7 b; M" s. u3 X2 M
  262.     if(!bRestartUpdater)7 j3 S% h9 W+ j- y
  263.     {1 y0 P. Y3 `0 T' A
  264.       int iCurrSize,iFileSize;4 C  }: w' H3 `$ Q7 K
  265.       iCurrSize=0;
    2 w( B1 I6 b% |
  266.       iFileSize=UpdateList2.size();1 t3 s7 d& k* g: G. o! f/ y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");7 V0 M$ z! U% D2 ?4 A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ z- ~9 ~" Q2 i0 M6 M* r$ t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 N0 g: ~* C# i9 s2 u  G% P" e$ Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! N- n; V# f, @" d4 \, E: N
  271.       Fclearf(".\\update.dat");  ~5 p. E! s$ Q4 T" |& i
  272.       Fprintf(".\\update.dat","Bloodyf\n");, V9 D7 K6 T/ o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; u( A2 N* \( B
  274.       {& s; Z: W4 j# p( s/ [7 Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * k8 c: T7 u6 W: a# Y3 i/ M* ^
  276.         {+ `6 k# H7 a9 x. o* k
  277.           file=(*p).second;
    2 Y. M" t' d" a' t
  278.           sprintf(filename,"(%s)",file->file);
    / J: x4 T4 H7 P& ^" }, F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % ]6 G2 l+ w) D1 h4 x
  280.           iCurrSize++;
    ! H0 b6 l4 e: @, c3 I
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 _, J# F3 C9 C. @
  282.         }
    7 t' a. t8 [9 F- x( O5 M
  283.       }/ L9 R+ R5 }* D4 H6 l6 B4 c
  284.       unlink(".\\update.txt");! B& G6 N$ e% I  V& ?& i0 ^
  285.       unlink(".\\update.tmp");
    - ?+ n7 f8 f: g' K5 o+ W$ ?
  286.       Fclearf(".\\checkversion.dat");
    " V! w' O2 @# H- ?. L* a; Q  n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 O2 O( B( z8 v+ n4 W3 j
  288.       if(UpdateLocal.size())
    0 E/ Y8 j% d: h% Y
  289.       {
    ' q  P" I" d6 H6 A, x* t" U
  290.         UpdateLocal.clear();
    8 e7 M, M$ c. q; D
  291.       }
      M' z3 w$ x* `
  292.       if(UpdateFile3.size()); ~* J, `* p/ i  o- l8 u/ Z
  293.       {
    6 h- ?4 W$ t; {! z6 Y! v% e: q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; u: ?) E; W& N1 L/ }' @& J" z
  295.         {2 U' v. w/ f- f, N  K
  296.           file=(*p).second;$ d& M9 ^( e- Y
  297.           free(file);8 ?; u1 i' X5 k0 i% @
  298.         }
    - l/ M, V; C1 d' v" D6 \
  299.         UpdateFile3.clear();
    : N4 L; h7 w- Y+ J  E$ l% R
  300.         UpdateList3.clear();
    : [2 T$ f7 G9 _' W0 F" i" X9 p, W$ p0 ?
  301.       }
    4 n/ `) i2 E5 Y5 n& [$ I1 V1 o  U' }
  302.       if(UpdateFile2.size())
    ' F8 }8 N/ N! \
  303.       {
    7 L2 k* l9 B  ~2 V% I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 F+ M* i, z8 k5 f
  305.         {/ E8 I8 o1 d; W/ {5 t! X' R
  306.           file=(*p).second;* L. K) F% l7 O. R! M. e
  307.           free(file);. b# Z/ R" [! P* C1 o
  308.         }# m- l2 c( Q/ y7 g
  309.         UpdateFile2.clear();
    ! _0 z: ~) A4 y! q4 D
  310.         UpdateList2.clear();
    ( S( A7 a/ w) L& `
  311.       }
    / [/ R3 B6 y$ c+ t- h. Q5 f1 ~: {
  312.       if(UpdateFile1.size())
    & E* u' i' y7 a+ \. u
  313.       {% l9 n. o7 a, w7 e2 r1 i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - A3 E( o! ^9 [. u' }. O8 r
  315.         {
    ' a$ m: Q' a3 ?% h! k9 r
  316.           file=(*p).second;
    & M' w5 A$ c: Z2 I$ b! N
  317.           free(file);- h4 g" w& K4 \" t7 H7 J: S
  318.         }4 B2 D& `4 a/ I: W
  319.         UpdateFile1.clear();  Z# w3 Y( v7 C
  320.         UpdateList1.clear();$ \" e- {1 c4 D2 b. G+ s3 S
  321.       }  x: @6 J% J7 l, K
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ( L$ E, m5 |- T  a% U  S
  323.     }
    2 v9 q! O1 v" d) e" ?  O
  324.   }# W3 b: J: n6 W
  325.   return FALSE;) Y# t1 {8 e& Q/ l! B1 a
  326. }
    9 Y1 C0 s6 ~' w; D$ }' |

  327. ( T$ W8 D5 K0 x# ~7 J
  328. void CRevAppApp::ClearAll(void)0 [/ \0 v% H6 I, u% v9 K5 k
  329. {
    " O, ^; t3 j6 o: Q# t2 q$ B
  330.   LPUPDATEFILE file;" _4 Y' S6 X' q+ A  L# N' ]3 Q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - T* h7 ]4 M2 m
  332. ; d! M: e2 c- Z% y. M/ _# c0 x: t
  333.   if(UpdateLocal.size())& i! H+ z) w0 }" x  Q; D+ H9 ^
  334.   {
    , \; @' ^0 M) D8 _9 D; Y: D
  335.     UpdateLocal.clear();
    . h8 m* ?5 D1 L0 R
  336.   }
    - C' L$ x6 d, s; T, K
  337.   if(UpdateFile3.size())
    % H4 g8 f- b/ L+ k
  338.   {
    # [0 P0 j- y: \! A/ J) h* n9 i
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & I3 @+ g3 u. v$ ]$ i# T- _9 U
  340.     {
    1 L4 M4 g* s. b5 n! T1 O  W) q
  341.       file=(*p).second;  [* Z; k4 P$ \0 S
  342.       free(file);7 R% R* }, h: x# \' l
  343.     }* @8 u- P) i; n: h
  344.     UpdateFile3.clear();6 p5 ^6 z4 \( i8 }& Y: ?
  345.     UpdateList3.clear();5 ]1 z9 U& ?- I& K8 `' f8 a* J
  346.   }& E& g# }( c- ~0 K- P9 e
  347.   if(UpdateFile2.size())
    / r, A7 X! \8 T  i; r
  348.   {7 M0 i4 r1 ?/ I. ]5 w9 G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ n, I9 o% Q) }' E! k
  350.     {
    3 l5 J, n( G* k- d/ |
  351.       file=(*p).second;
    8 z8 W" r# n) b1 N* m' y5 K
  352.       free(file);& T$ B" y6 ]* |* v
  353.     }
    + E3 B* R7 A0 t1 B: l
  354.     UpdateFile2.clear();
    2 @: \4 o$ G' R/ v. ?$ s2 z
  355.     UpdateList2.clear();9 V$ j5 _! Z1 S" v
  356.   }
    ; M, ?7 P& @2 i+ C
  357.   if(UpdateFile1.size())
    ; h3 K* t6 h# L# _
  358.   {
    0 I: q4 V) U4 o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  T$ V1 Y- G6 {2 |3 p' [
  360.     {
    7 x3 S2 s3 p# r; Q3 d/ g
  361.       file=(*p).second;
    $ @) g8 }' K( B. F
  362.       free(file);
    ( c  R/ e/ z7 N9 \$ @, f
  363.     }  }0 r8 N* A7 l7 U! p: ^
  364.     UpdateFile1.clear();# ]( G* E; n" V; S
  365.     UpdateList1.clear();
    9 K" Y! G) g# a
  366.   }
    , h( P: T  `6 n+ o5 z" g( m3 @
  367. }  + F! c- u; k, y0 |: E0 i+ L0 m
  368.   
    * j; ?9 L; M! c2 h; x% r
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 v4 C/ T- a. |# t
  370. {
    0 c* k2 D2 d: d' @2 P4 w
  371.   int c;
    ) L& i+ b4 h: E: I7 G2 g6 D$ O" p7 V
  372.   LPUPDATEFILE file1,file2;
    / L/ _- E  R& o! e& K8 [  i- q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;2 P! Q0 P1 k  `. `5 D4 R" ~! q
  374.   std::list<CString>::iterator l;5 U/ q, v. C3 t1 h1 L0 Y. R
  375. # u% F. ~# q& c
  376.   UpdateLocal.clear();
    / M% U7 e  p, q- I6 ^. j8 Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);- z% q# Y8 l5 j( w% w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - X$ I3 @- J* b7 c$ Z) H7 ~7 h1 E( Q. ^3 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( _/ E0 a. w" @8 v0 p" {. q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    : Y8 R3 l3 o, u) T& W) ?4 Q  X1 f
  381.   if(UpdateFile3.size())- b% p+ H$ A+ h1 c4 q% q
  382.   {, Z- @) c& ~) \7 V4 H% v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 O7 A4 k% d% X
  384.     {; D) a7 G9 t% n; t- G. ]4 q3 d
  385.       file2=(LPUPDATEFILE)(*i).second;
    / U4 C" x% b* ^: i: U# n! b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - v$ O! N, y/ y  r, [+ l" ^
  387.       {
    & K1 g7 M9 t/ p( ^* n2 c
  388.         file1=(LPUPDATEFILE)(*p).second;- [/ Z. z$ M* m9 [+ m0 @
  389.         file1->vers=file2->vers;
    & s/ ~0 O: [: ^& i1 s9 Q
  390.       }. e. [' d6 O& V7 W! Y7 l$ o
  391.       else/ C( s+ x# r  `* \+ ~
  392.       {2 Y5 G2 G$ {7 G/ y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , J  W  N% O- h2 e- b0 C" D9 o' x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 V' b" ^9 n5 \1 ]- J7 g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    % X! |; g' }/ ]/ r, ?+ O
  396.       }! Y& r  j" M5 b2 I- E9 \+ D6 Z4 ^
  397.     }! L. u$ {6 m% B. G7 ?6 ?
  398.   }$ j2 K+ F- t2 b- e. \8 ^' G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# |' Q7 R; z) o! {7 P' g/ _7 s
  400.   {
    ; E7 S( V* f! i) S
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ ~4 k( v" Y" p4 B
  402.     {. Z- ?3 J1 ~7 @  ^  I
  403.       file2=(LPUPDATEFILE)(*i).second;
      c5 j( }9 ^3 A: _( i2 h; m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 s6 L/ V9 s6 c9 U& S" d
  405.       {
    - I6 ~, F  Q/ o% O, o
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 r: @5 t$ G2 N6 k
  407.         if(file1->vers!=file2->vers)
    1 n7 s. d# ^8 y9 \+ R) D5 k
  408.         {
    ( ~# u, i9 Z/ m9 D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 V& S- ]) ^, ]3 M
  410.           c++;
    ! L) l6 C5 t! g* f$ i& y
  411.         }  [/ b5 L4 h1 H
  412.       }3 V* `3 V) {% S8 l, m6 }* }- }
  413.       else) {. I7 y: U! ~. Z
  414.       {
    ) g8 e* k, v% @% j8 g7 x: w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- f9 I6 ?& r. L/ c% h5 W) @2 |
  416.         c++;
    + t- F# W' q% Z9 s0 o
  417.       }; x  Q) y' A( _; q3 A
  418.     }
    . t" x& `4 U, x: m
  419.   }
    5 U# e2 u  y+ ^# L, T" I
  420.   unlink(".\\DownLoad\\update.txt");8 e7 [$ M" L# O
  421.   if(UpdateLocal.size()) return TRUE;
    ; e0 \, @; h4 _2 [& S# c5 q, j4 F& |
  422.   else                   return FALSE;
    . `3 G/ V' O; i$ d
  423. }
      S' Y0 C7 ?& X7 t8 b( b
  424. $ A7 W! E9 y  Q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* q$ @" y! G2 w1 Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' l' t0 J; ?+ R  M3 u

  427. 1 m, g/ {" L1 R& T: ?+ r+ e
  428. , K/ X+ w6 x) f
  429. 9 h" a: z6 B( }+ z: V8 A1 U1 Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    . e) |$ f4 E3 _1 U, [6 N& i0 ^( u: m
  431. {
    . L- f8 g8 a( g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: M# [2 [$ Q+ b+ @* s5 O. |3 Y) c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 ~( n) e( F# W1 O& ]& s
  434.   {
    % e7 |6 M* Z6 y- K$ {% ]" _" M( D
  435.     char szLanguage[50];
    , w" _+ Z5 o/ u2 o$ |3 H( W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : [' }$ k9 f2 U. c7 A, l. ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: q& O, g5 o7 y0 j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ [: D! s( K8 Y/ A
  439.     else                                   m_iLanguage=ENGLISH;9 Q, r" \0 ?* W" Z' z
  440.     char szRegister[100];
    * ]4 n# D- ?( @' l, Q! u& H* U' p
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) }( c: M. \5 h  y# i9 @! f
  442.     strRegsName=szRegister;# D0 |8 n2 a( a! y4 m+ I, ]
  443.     char szPatchURL[100];
    , z& r# n, e# @; `. U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) l8 B4 }) I" A3 c3 \' \
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( M8 Z  q- d* I% A" A# [
  446.   }8 G8 l' d  B" P
  447.   else
    6 [9 Y3 I3 B9 n) [8 G* s2 G
  448.   {& x9 ?" ?5 @# w+ Z6 L9 |1 n0 j; S
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% B; y8 E+ x- h7 m: ^
  450.     strRegsName=DEFAULT_REG_URL;
    1 }, P9 `1 D$ I0 Q1 M) }
  451.   }
    5 y# N: J$ ^7 q3 r+ ~- N8 W, t! r) G
  452.   if(GetFileAttributes("hosts.ini")!=-1)2 U8 v6 f3 n* Y6 M. I4 V& K8 O
  453.   {0 v9 P' ~. j# B! |, ]
  454.     char szIP[50];
    . R' y/ i  ]7 b4 H1 s  v7 Y) `
  455.     char szDIR[300];9 ~, F5 Y6 h" v& s
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # o- _0 W0 v5 ^- J' z
  457.     {8 H8 w. G# b: U, e
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");- `$ o; S3 b$ F/ D' ?* O+ K/ o% a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! L+ b6 E5 v0 X: {
  460.       strHostName=szIP;
    ) H* ?  ^6 Z1 H9 J
  461.       strHostPath.Format("/%s",szDIR);: a# _9 q  Q( W, P
  462.     }
    7 k' G+ E. E9 Z9 A' F8 J
  463.     else
    4 ?% b  n& u, O1 G9 o3 k
  464.     {
    . g& J* |# h$ l
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 M3 o7 j) z* w+ H  K* ^& t2 j
  466.       {
    % u' r2 F& R+ C: X/ Y" q
  467.         char szLanguage[50];
    . P7 {! N: l" X5 O; o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & B: N( z4 O" ], y3 i& u8 A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ b' D8 H& L* E' l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: }+ H5 y1 ], j3 Q# u3 o
  471.         else                                   m_iLanguage=ENGLISH;
    0 X& U3 J. m& d+ Z: c$ z. p
  472.         char szRegister[100];
    2 s& Z0 `4 Q1 ]0 D) z" \5 @
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# B6 r3 G  N) t$ `" h
  474.         strRegsName=szRegister;& z7 k; c4 _( c+ P5 b# Z
  475.         char szPatchURL[100];& Y7 ^( h( ?' b0 R! T0 t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 F/ _, e3 F* e# ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      T5 S! M% B/ T' P" E5 `0 }* y& g
  478.       }
    0 y1 m* \1 _  Z0 L3 {
  479.       else( w# M5 c) a1 P6 T$ x6 G; |
  480.       {
    1 }  B: |; u4 A+ ]6 d
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: T  h. L( Z$ f  |+ \4 d# q) n1 L
  482.         strRegsName=DEFAULT_REG_URL;  ^9 C& a2 ]( j6 ]0 c4 b5 j
  483.       }3 M9 g: W8 M" K9 M$ W/ t
  484.     }
    2 L' q, E- t, r# j4 U3 `; y$ O2 ]: D8 Y
  485.   }
    ; v) E5 m3 ^& [
  486.   return true;& A, Y" O# N. Y' Y( f, `+ Z% s+ }
  487. }$ ^+ C5 U2 t$ y- \- @. W

  488. ; v' S4 }5 u0 b+ w
  489. #include ".\ZLib\unzip.h"
    # `8 H& D- b  ^  f( _
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 H! p$ }0 i- b4 p) Y4 Y3 j
  491. /////////////////////////////////////////////////////////////////////////////
    : h5 Q; G, @2 v
  492. // CRevAppApp initialization# q: `4 J/ K# b

  493. 5 c$ ~$ D- P- \% d% j1 ]
  494. BOOL CRevAppApp::InitInstance()+ g# [  w1 K9 {! V! F3 V  A! l, U
  495. {
    ' N6 x; h9 S1 o$ B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( B2 t8 A% `  V# b& c
  497. 7 o5 k! F0 L" u8 o6 W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 {$ \; y0 _8 K. u5 N) w- _
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 A/ n9 w+ }/ j' V& s( ^
  500.   {
    4 Z7 M4 d; e1 ], k4 _$ @
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% x) L5 s% w6 M: B( P( h: N& A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ _6 z& z1 S2 X! Z9 I! ?# k& q$ l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    * ~$ A( ]9 V: Z* a1 q1 O0 q$ J
  504.     {
    5 I, x% w8 U! O. ~% Q
  505.       strcpy(szPath,szPathTarget);
    $ c) B7 p. z% N3 E7 `
  506.       SetCurrentDirectory(szPath);& X8 ^! d# O! P+ c
  507.     }2 o2 u! r8 q. a* P) c* `2 E
  508.   }
    ! A' X6 h, C  ]. Y# b) v
  509. #ifdef _DEBUG% l( T+ U) U" q& J
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 ^+ a1 O$ Q2 b8 @
  511. #else
    4 T4 h; Q+ O' M% s( x
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 M0 ]( l' }8 v" a7 a4 W
  513. #endif
    2 E% I( B  u( Z2 [
  514.   {
    + u, z- B4 x) I7 f5 e$ O# I& g
  515.     char tempFileName[MAX_PATH];
    " |0 E! h. e3 D. @
  516.     strcpy(tempFileName,szPathSource);( C5 ]6 m! N) m( \( h& ~2 L
  517.     tempFileName[strlen(szPathSource)-12]=0;% d! G8 c) @  A- J7 G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * S% R7 _* ~7 K1 c. ~# b% x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * y; j" N; S8 n7 e* U+ C/ w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& e( Z: R# M, J% X# H/ h
  521.     return TRUE;
    : l" U) H* y: V6 Z
  522.   }3 B/ n) o* |; F3 d8 H- G
  523.   // Nuke 0118: Delete run.exe
    % v9 t' @8 A, w
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, ?3 e* {. r6 E; Q: y/ f% ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 k. k) a% M- P9 f; G
  526.   if(!ReadCfgFile("Config.ini"))
    3 y* h9 g- B8 ~" V; C
  527.   {% t& }3 T9 @: h
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' \( u! i. Z7 S0 j3 X3 Q9 ?4 u8 d" @* n
  529.     return TRUE;
    3 o8 I- j4 q( A, f( c7 v3 Q( @
  530.   }  ]: d' P4 l" i3 ~2 L! v. p1 N# t
  531.   HANDLE mutex;
    0 d0 y$ g3 D) m, \; T2 g- l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): Z5 s+ q) D6 ]" @$ v
  533.   {0 Z/ t1 S7 Y$ U$ V, `: B
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" c6 @) Y( q& C( G8 J% o7 I) d
  535.     {
    ) S* e  A6 @; L+ R: j
  536.       CloseHandle(mutex);, o+ q& [+ Q) b  T1 f  B! Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( ]4 H8 k- O* m
  538.       return TRUE;
    4 Y% M) ?& x, G  M# N  b
  539.     }
    / W9 o2 \6 R, z- V7 f
  540.   }  5 S% W. _6 ^$ T
  541.   CloseHandle(mutex);
    ! a, Z  \5 _9 R. Y
  542. 5 z* g+ _7 i0 @# f' U, B- ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    6 n2 M8 M1 i6 k5 t; s! Z5 C3 d
  544. 4 A9 M' Q! ^9 e7 ^
  545.         AfxEnableControlContainer();" L8 \0 z. Z9 O4 _2 _

  546. 6 X4 h5 A) S& N* W3 D
  547.   bCanUpdate=FALSE;
    ! F6 I/ N4 M' v/ h4 Y
  548.   dwStartUpSteps=1;
    * c$ |- d0 b! q, M- ]( d. Y/ q
  549.   dwProgramState=AP_NOTHING;( a% I" R% _, |2 p; F4 {# }0 s2 I

  550. - E( h$ p2 S. `3 D9 D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  v: M4 p; ]4 T2 P  G* z1 T

  552. 7 a# X* d  F$ u
  553.         // Standard initialization8 @) y. F4 W& K9 H9 ~/ }
  554.         // If you are not using these features and wish to reduce the size5 d3 C+ j9 I- e
  555.         //  of your final executable, you should remove from the following
    ! U3 u; L  u& j) g' J
  556.         //  the specific initialization routines you do not need.  L* v( A* K" R- r; F3 E. O
  557. # o  `, ~$ V& r4 M' `1 X. i$ z
  558. #ifdef _AFXDLL! h, S2 k( ^0 \
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * T% b( _5 X* C) O) o' U* l1 \1 L
  560. #else; T1 N4 {& S3 Z/ E
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    - _8 N  d9 U; l' y: p2 q) [
  562. #endif
    6 X. M0 ~( u: L! e
  563. 4 |" O2 f9 I) x$ _1 J
  564.   dlg=new CRevAppDlg;% i2 _1 m4 l9 l( \' O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 M5 B5 T# h4 W# w! d0 c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , h# `  J; ]$ c5 C! }* O' K
  567.   m_pMainWnd=dlg;+ ~. F5 y  J( N

  568. 5 q- `  V0 h5 X0 F- {/ ^( o, I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 z# \4 Z. \. @& I; `
  570. # ]+ |. ?+ T0 M
  571. //  GdiplusStartupInput gdiplusStartupInput;' I# ]" O! c! G
  572. //  ULONG_PTR gdiplusToken;! g( R0 R# u9 x6 a3 x( d/ A' S2 Z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 @% d3 ?& ~% _. C

  574. ' j2 n# [; L. {7 h1 Y
  575. //        CRevAppDlg dlg;
    5 K7 a4 e1 I' a/ C/ E# p7 R8 }
  576. //        int nResponse = dlg.DoModal();
    ! t7 r- T2 d& j6 m: n+ l. ~% g! l
  577. //        if (nResponse == IDOK)
    " N' ]! a0 ?) X" p, ^" g) B
  578. //        {. M9 a; p& H% B' G
  579. //                // TODO: Place code here to handle when the dialog is
    # ]/ W3 d, I& ?% x# F
  580. //                //  dismissed with OK- g2 r6 O5 `' q3 ]7 c$ N2 |
  581. //        }4 z" R; a, n( A; X6 {. S
  582. //        else if (nResponse == IDCANCEL)
    & n1 p8 w7 o* g) z6 r9 R
  583. //        {
    : L7 C% _* e+ ^/ f' U6 q
  584. //                // TODO: Place code here to handle when the dialog is
    & o8 A; j5 J% f/ V7 ]6 ^
  585. //                //  dismissed with Cancel* P) y5 ]0 e4 e3 g7 x
  586. //        }
    % N0 j: Z( o( F% z( }( Y3 ~
  587. : J6 W$ M$ P. }
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 y7 A: @0 i: M1 [+ f, [
  589.         //  application, rather than start the application's message pump.9 h+ N! v. g, S/ D; i  g
  590.         return TRUE;
    & L3 S% h9 d* |% A2 V) B; X2 j3 m% T+ E
  591. }
    : p" e$ y( @2 x: e8 D  s9 S% I
  592. 2 h3 V) d5 l( k3 A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)2 B! ]4 e* F) O, p0 q& s+ S! n8 p' x
  594. {
    4 u+ z$ D5 t  ^! C- ~3 ]. @
  595.   int i;. q2 R1 d" [' K% W
  596.   char *szRet;4 [& i; a: u) G8 |: P- ~- s" T
  597. - r4 G9 ]. x- }( O3 ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }$ P$ Z3 z2 c2 M, G
  599.   if(sztoken)
    ; \& A( g) ]) o8 b. @
  600.   {; Q! x6 D+ f: B/ @+ e( D, v- V
  601.     szRet=&sztoken[itoken];
    8 b! k) T# v% x, E, x$ b7 c
  602.     while(sztoken[itoken])
    9 d' O2 B# F5 |6 l. T9 B9 F
  603.     {
    / ~0 N6 p- [8 x, G- y: w$ q( e
  604.       for(i=0;i<(int)strlen(token);i++)
    * X. _4 d% C8 g( s
  605.       {
    6 Q# _' S6 m/ o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 A6 R4 b4 o2 W' }' w8 u
  607.         {
    ) ]) n1 D# p  a' ~/ c! W" L$ S0 n( f
  608.           sztoken[itoken++]=0;
    : ?. {9 C3 n6 z" a' y9 L
  609.           sztoken[itoken++]=0;
    ) H5 ~' d) o! l  K+ Y
  610.           return szRet;
    % c; ^% M- Y: ]/ G
  611.         }
    6 @3 ]/ o$ m1 n2 c% e
  612.       }$ l- I+ Q' p- B  E: [  K  k, h2 f
  613.       itoken++;( s) \6 K  {+ a/ E2 d* f0 s
  614.     }
    4 i4 {5 Y& r$ w0 s9 A
  615.   }
    ) ]4 t$ c9 r  W* o
  616.   return NULL;
    1 K% p+ b2 @, `# P% h4 {' L; L2 x
  617. }
    * U- }4 {1 J; N; X1 k
  618. 6 Q2 C1 z4 Z( o2 n* T8 `
  619. void ProcessProc(long Total,long Current)  R0 d! c+ j' a. R& F3 Z
  620. {+ t) s6 m9 y/ V$ f# O4 R" M
  621.         MSG msg;
    * u* _; z$ [% w3 O' ~; ?$ a4 m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( Z( k: v( |1 p2 b# D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ r3 U) g7 I6 d' m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): f* D/ L' v  G9 Q/ ~3 y
  625.         {
    1 Q, o+ D  P4 F* p! a. [2 }/ K2 O
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " g$ ?9 ?4 J9 R0 b& i8 s7 f* G4 S
  627.                 {
    5 ?2 |- C9 c! K6 S6 ]' S( I: n
  628.                         return;' o2 \8 @) y: L. a/ T
  629.                 }" ?4 b1 I9 H$ j; D
  630.                 TranslateMessage(&msg);
    4 b. S+ ~+ g5 U$ e* v4 m
  631.                 DispatchMessage(&msg);, ^* I; D; w5 c4 V& R* E+ j
  632.         }        6 S; p8 H4 _7 V: K% I6 t) j4 T9 H
  633. }" c+ E" g" @$ w* G. V) U, l
  634. 5 ?; _7 U3 r. h$ B) A
  635. BOOL bFirstChar=TRUE;
    / y2 m- |4 ]( p; I
  636. , R. A- Z+ U: j+ S0 Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    % S/ G# ?3 t( z& c$ C* p
  638. {" E# J" w; {& Q* k; d
  639.         // TODO: Add your specialized code here and/or call the base class
    ' [5 D4 {" n. Y, \! `$ {
  640.   switch(dwProgramState)
    4 W& I  a, L; r. z
  641.   {+ T7 z. e5 X1 Y9 P
  642.   case AP_NOTHING:( J+ W2 n! C$ _" d! @' s, P2 h
  643.     switch(dwStartUpSteps)' _7 l. @! F$ S) q5 z
  644.     {+ V8 j/ F# s) t2 V% n1 v/ Q# d3 f
  645.     case 1:5 ^9 a) u: o9 t: N% m1 B& B
  646.       {+ n0 ?. B( g' ^, t, v# X: l& F
  647.         int i;; v' k( v" i3 l
  648.         CDC *pCDC=dlg->GetDC();
    . j1 H; X' r" z+ B; J
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 K) G8 b5 V7 u" c
  650. //        Graphics graphics(hdcwnd);2 b' u* T8 ]. |& Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" c: h7 o- b) @* ~9 m3 B+ e% V
  652. //        INT iWidth=bitmap.GetWidth();
    6 I( q0 K) k; ^' [1 H7 \
  653. //        INT iHeight=bitmap.GetHeight();) M7 P# d; O+ ]- }
  654. //        Color color,colorTemp;1 G, y: V' Y! H8 o& v& j: e! A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)6 \( d) }1 N4 }
  656. //        {
    3 R  u0 U  R* W/ `5 e$ s5 [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 d3 B: T2 u9 j- S2 P
  658. //          {
    + e4 C* R9 t% d; k: \- m1 W& t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( ?0 K, j8 T. B. E4 }/ b# j
  660. //            colorTemp.SetValue(color.MakeARGB(
    . o- y" V9 G3 f- h
  661. //              (BYTE)(255*iColumn/iWidth),
    4 r/ o+ d- d& S6 A
  662. //              color.GetRed(),6 C0 h3 N) h: @- Q2 y
  663. //              color.GetGreen(),
    7 W) z$ o3 f$ R: [5 T7 j1 C* m
  664. //              color.GetBlue()));
    % X8 g% G, _0 t. u+ {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. x2 M3 B2 l  m9 q' _' S% z
  666. //          }7 h( N5 P( g- ?! @; t% s
  667. //        }8 Q( o4 f! v6 l4 u% h5 E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) P! R3 O$ n2 {% C% ?  m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: z$ z' e$ n) l3 v1 f$ O. T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");1 P: f9 M4 w% T! C, K8 M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / [  X  Y2 S) B* O  p  Y
  672.         for(i=0;i<240;i+=8)
    5 B8 [$ U1 x! n) E. ]2 H
  673.         {- R7 I0 o- t- o) ]( K9 l! ^/ U9 U
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 B, l) X% P2 V' Z. d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ u  y' D5 M7 [9 `- H( ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 T7 G6 I6 k% c6 `2 X3 B
  677.           Sleep(33);
    * M& U1 g4 [, v" d4 o1 l* l% W; R' I5 c
  678.         }
    3 B. {( ~  `3 j- a: Z6 z
  679.         Sleep(1000);0 ]$ @7 F7 x1 A5 v/ ?/ G5 O1 o
  680.         for(i=240;i>0;i-=8): m$ p7 |! D- I( l1 u, |
  681.         {2 U' e: i( u: @1 r
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 j- i6 ^% Q, L7 @# D$ s7 v7 V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 u6 D  \2 G1 Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 F. |/ M3 _; [4 X  `" @
  685.           Sleep(33);
    , u9 W( s# K& b: }. p, l* j
  686.         }! c# X3 u) R  P$ V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 D) j* [, s0 ~+ Y* f* O
  688.         dlg->ReleaseDC(pCDC);
    2 T$ ~' E1 M9 u! ?3 l( v
  689.         DeleteDC(hdctar);
    7 u( O( N3 G9 Y- B( m
  690.         DeleteDC(hdcsrc);
    - V! w- G  Z6 P  Y
  691.         DeleteDC(hdcorg);
    0 Y2 }: {( n% W3 L6 o
  692.       }
    6 k5 ~" ]2 u% T! S0 _5 q3 l
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) \" k' ?5 p' s; i+ V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & ~: Q5 g' U4 I5 n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - _& J/ b/ b6 ^- ?! Y/ \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 o; o; f8 t5 Q5 W# G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      b, l* i* \$ f' Z
  698.       if(!Dn.Connected())
    # N( |5 h" W5 Y0 b
  699.       {
    2 N$ ^, ^6 T" B8 f* i* A/ l% q6 g
  700.         dwTotalFiles=1;# G! O+ V8 ]; P* e! F
  701.         dwDownLoaded=0;
    7 V% `1 k% @7 D5 R& B& x
  702.         bSilentStep=TRUE;8 o3 _- [2 s5 F) C, D) v* `( n1 F' \
  703.         bCompressed=FALSE;" A* h8 M9 S. n- Y
  704.         strExtLocal.Empty();) t% g3 a6 q# a- X4 a  T4 @
  705.         strFullName="readme.txt";
    / k# y7 v) ?; l  x+ u
  706.         dwProgramState=AP_CONNECT;# a' c2 k' b- m
  707.       }
    ! U. @- Q4 F! q- Y1 {7 w
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    # O$ D3 K  ^; M6 U
  709.       dwStartUpSteps=2;$ v* m: b+ G2 L( j7 `* K* E! r3 |: ~
  710.       break;5 A  i  g5 H/ w4 @
  711.     case 2:" m: A- q+ s8 {6 g  t
  712.       {% f- B9 @+ q1 S
  713.         int iEOF;
    # Y% B) H" Z1 Q; x  m* z8 [
  714.         FILE *fp;5 E/ K* q: \0 r8 d) P6 M3 ~( V
  715.         char szString[512];
    & X6 c) u% F5 C- l. ~8 j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 {' U% T6 c6 w# |/ r2 v9 l
  717.         if(fp)
    6 G, y& {- f' Q' J+ b& T& ]7 }" u
  718.         {9 W, b& L/ @* @! G; r
  719.           do, O- b7 h1 m- P9 G! y; U$ @& ^
  720.           {
    " b# c- P% y1 |
  721.             iEOF=fscanf(fp,"%s",szString);
    5 \& J- W3 ]# s4 t: V
  722.             if(strlen(szString))( V8 A$ L; h) Z: o$ x0 H* K
  723.             {
    6 |! s& X6 T5 k" k
  724.               if(bFirstChar)* @, Q! n0 l1 s9 D- @
  725.               {9 X7 T' j' f' m
  726.                 bFirstChar=FALSE;
    : I: @) S3 o3 }8 h5 B7 ^
  727.                 bConnectIsBig5=FALSE;
    " J7 A2 n6 G0 L0 e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; X! R- s: i. x
  729.               }
    : ~; M6 A' [+ Y0 w1 @% X( x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 G! k1 v- y/ t9 |
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' b8 w; O, y' m4 g
  732.               dlg->m_ListText.AddString(szString);
    - W& B0 v) i" v; B7 u2 q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " c  q3 m4 c. |  J5 J' l' u& H
  734.               *szString=0;
    / M' l& @+ l# C8 h1 r
  735.             }3 |6 v+ H. r1 d: |, N% k  e+ }
  736.           } while(iEOF!=EOF);
    $ T2 ^3 A2 Z- |2 Q- w; \9 c3 L
  737.           fclose(fp);
    " e* x! ^+ ~6 B
  738.           unlink(".\\DownLoad\\readme.txt");- k* C5 h2 E, ?6 {" V" w
  739.           dwStartUpSteps=3;. W4 M  |% R8 i4 M1 F
  740.         }
    / W* m; T, _& P9 \$ J$ T1 A
  741.       }
    ( }8 H5 f2 o  ~2 `" T0 h
  742.       break;: m& E$ q5 m7 b8 Z
  743.     case 3:
    ( N/ |: S0 O% k
  744.       if(!Dn.Connected())
    ( ]1 U1 {6 X/ u3 Q- d6 I$ ?" I
  745.       {& A/ W/ h  v! v3 l; A* ~1 t4 E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! B7 q  _( @1 S6 ]0 k( j
  747.         dwTotalFiles=1;( _' j2 Z$ q* n7 e' z- d/ L* V
  748.         dwDownLoaded=0;
    4 \& g+ V( c% e& v& R: A
  749.         bSilentStep=TRUE;
    9 ?/ p2 L9 C9 [3 o! H: m3 X
  750.         bCompressed=FALSE;
    4 o- F$ Y4 r; A) @4 J$ y6 P; s
  751.         strExtLocal.Empty();7 F& e! j) s8 F; E) o
  752.         strFullName="checkversion.txt";
    : z, r: C. A7 @6 A) L# {" `
  753.         dwProgramState=AP_CONNECT;
    " K8 J4 z4 b. N; U
  754.       }
    , ?8 A! `( c. n$ e; B& w. Z
  755.       dwStartUpSteps=4;
    . o/ ^7 E6 o- v) r0 |
  756.       break;0 j% i0 u" w6 b7 q) I2 b
  757.     case 4:
      _) L* G; d0 I; c
  758.       {5 m) N! ]- S5 b3 M6 l- ?+ s
  759.         FILE *fp;
    , X2 t8 Y; Y/ ^7 E8 C+ r, D
  760.         char szString1[128];+ O" s2 I% Q6 B) p; Z( B! Z
  761.         char szString2[128];9 E, M  y0 n0 P% M: B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) L- _5 Z1 T) {, [& D8 j3 \$ c
  763.         if(fp)4 b0 P6 u1 q9 u; O8 }
  764.         {$ k$ C5 A3 Z' D1 F. I5 g
  765.           fscanf(fp,"%s",szString1);; ]% @) a! ~: @7 S) ~% s! W7 a
  766.           fclose(fp);2 `! Z) @) K4 `( z; A3 g- {( O; c1 P
  767.           fCheckVersion=atof(szString1);
    ; M; T4 {+ x  s
  768.           fp=fopen(".\\checkversion.dat","r");
    # o6 C7 H0 C2 A$ z$ q4 `  v: @
  769.           if(fp)
    3 P2 B# a" G  H* _( `4 [  e8 t; U  g& w
  770.           {
    2 a  x0 J+ Q: }
  771.             fscanf(fp,"%s",szString2);
    : Z" \8 F  N( y0 o8 j8 z/ A7 k
  772.             fclose(fp);3 W% \* D' h; J+ R5 z+ X( W) i- }
  773.             if(atof(szString1)!=atof(szString2))
    ) c$ U: C9 d1 u3 y4 b
  774.             {
    # M+ l, ~; b7 N. T) x
  775.               if(!Dn.Connected())
    3 n# J: c' F( u" h- J$ k4 i; m
  776.               {& O$ |5 S+ l* T
  777.                 bFirstUpdate=TRUE;
    ) \' B5 m1 m* T7 O! P* q  U7 Z
  778.                 dwTotalFiles=1;
    . G: ~5 z( H* p+ l+ y
  779.                 dwDownLoaded=0;3 k$ B; ]: b; p. o+ ?0 w
  780.                 bSilentStep=FALSE;
    % K6 c; u; G1 k
  781.                 bCompressed=TRUE;" O6 `: W  T- f: m& T0 N
  782.                 strExtLocal=".\\DownLoad\";
    : V+ B4 b9 L- {) }. E8 l7 Q: n6 D
  783.                 strFullName="update.txt";
    4 g" m; x+ o! ?- Y  w& E' E
  784.                 dwProgramState=AP_CONNECT;
    1 X6 k& z3 ~# y$ B8 M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ i* P% c3 }" ]. l* r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 D) o- h% y$ i  g3 ~) P8 R
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 j9 S( P8 h6 W3 J# S. C
  788. 8 Q6 W4 v9 u4 k3 k" q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' s! a* b7 z( x3 _/ |5 ^* I* i5 V
  790.                 unlink(".\\DownLoad\\checkversion.txt");( Z3 ]8 L2 D: [6 L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    $ j+ @5 p! c9 G) X: Y8 W
  792.                 {
    9 N, B: W: `5 T7 {, C6 f" t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 d0 y2 s3 N: L8 s* T5 ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");$ `6 b5 i. w$ A! A  a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 A" I4 F6 ?: l  B4 F7 f1 u" C  b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 F+ q3 q7 f3 G* w8 |4 K
  797. ! L5 }3 e% v4 `! ~: f% `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / |) i1 i  `+ v0 R9 {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 F" E# k' |8 y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& B; G9 `2 X6 y" P/ B1 D' U2 l" v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % D8 l% b- P$ {: G7 v
  802.                 }
    ) t/ G8 I! ]0 Z) ?/ K! G" H
  803.                 dwStartUpSteps=5;9 T7 O( W0 I, t  n+ Q, y
  804.               }, D: R# Y+ L" r8 t/ h0 O$ o" @
  805.             }
    1 H* A, c. h7 [
  806.             else7 [0 d2 ?! a3 E: H6 q1 ?( j
  807.             {
    * x$ I% Y4 H! T8 b; {2 i
  808.               unlink(".\\DownLoad\\checkversion.txt");# _% ~' |2 r8 j# B4 ?/ V, C6 i5 t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 x( `. J8 P1 E) u, z) a1 p0 Z4 P* {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 L) ?" _3 ?3 ?' m0 V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");  p1 k! P0 C& X! c! p/ {: B6 c
  812.   ?6 _+ ]* b# \2 b% b$ o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " U0 V! f0 _6 v* \$ B* m* O- @
  814.               dwStartUpSteps=99;8 |) t6 ?1 Q2 l8 ?
  815.               bFinishUpdated=TRUE;
    # G' E4 \0 ?) N* X) z5 T4 g
  816.               bCanUpdate=TRUE;
    3 J/ u; L- @. j9 C- ]& h7 R
  817.             }
    9 ]4 K3 @9 c" R# }; L) a$ L, W
  818.           }
    + |/ A3 d7 |3 T3 [! \
  819.           else
    6 Z5 B* e$ B' f% p# }
  820.           {
    + \& K3 F1 d6 J" G$ i$ p
  821.             if(!Dn.Connected())1 c3 Z3 ]* V$ e3 ^4 `1 ~; y
  822.             {
    2 b- Z; I* F$ J
  823.               bFirstUpdate=TRUE;2 a* J/ `, F3 s% A( B1 _! z% n
  824.               dwTotalFiles=1;
    , W) D* R0 o/ V+ o% b. i. s$ Q
  825.               dwDownLoaded=0;
    9 [' {) q: x- R% Y4 `& T2 k+ x
  826.               bSilentStep=FALSE;! d/ c! ?0 q5 @& q* d: Z
  827.               bCompressed=TRUE;- i# \4 z/ y) ]% K; Y. T# |8 ]
  828.               strExtLocal=".\\DownLoad\";
    ' |1 F% s0 O% U, b0 [
  829.               strFullName="update.txt";
    & s! m3 n4 e' g* T/ u  Z) ?! ?
  830.               dwProgramState=AP_CONNECT;1 v: B- i. p9 |9 ?6 a' N# r
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 Y- b" F  f# |, ^4 m2 n; Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' _' `, g4 j! a% O9 X3 l0 ]1 D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 p4 R# r2 h0 v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 o( F+ x1 P8 m/ I
  835.               unlink(".\\DownLoad\\checkversion.txt");" M' _. L3 i! X: c5 C( G6 M
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    1 m; s, T, j2 ~' q
  837.               {
    4 M# j  o3 B. \& o% O# i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! O! [& c; Q; O" t; A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! _% e& _/ w7 e* o, T2 U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");! _& \: R( I/ p6 w, E$ S: w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 {- x' @1 r8 r, o7 I3 z9 H
  842.                
    7 |1 `# Q  Z# R# f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) s% t' J% A7 }
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ _: w! p5 O% m: Q: _  F  _: g& i
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
      W. v: |& ]! I8 |, r& ~: L; }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ [- |9 ?% ^* ^6 W- a. C) t
  847.               }
    2 y: A  y4 v+ `
  848.               dwStartUpSteps=5;
    ! M3 K' b' O  z9 ~
  849.             }
    - H+ G' V- `* q% ^+ R9 j
  850.           }
    - Q) r$ i$ s# ^! u+ C& G: s' h) F' w
  851.         }
    ; ~! D4 J% a1 G$ h0 |8 p
  852.         else
    " d% G3 \& E0 @0 R/ d
  853.         {# Z6 i% G2 @& D. E7 h) r
  854.           dwStartUpSteps=3;
    % S- g0 }$ N" G5 r' ~
  855.         }
    + |5 Z! z% @2 T3 i
  856.       }
    # u, p7 l7 B. ?+ S# f% g; p  e
  857.       break;5 R, i5 T: P4 g
  858.     case 5:
    9 I! ^4 e. w2 j. j
  859.       {
    8 Q4 j/ r4 K2 M! w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 ~5 I6 V- T0 t8 |
  861.         {! }9 z0 N1 c6 h! O* d
  862.           int opt_overwrite=1;
    , B/ j7 e4 g! J, s# _& _
  863.           int opt_do_extract_withoutpath=0;
    . ~8 s: y( X, N
  864.           unzFile uf=NULL;6 m$ a0 Z( m6 t# [% Y

  865. 6 b. d( O: f7 v
  866.           uf=unzOpen("Wsa.zip");
    $ d6 `$ I- a1 P/ M4 S+ {1 j4 `
  867.           if(uf); N. O2 [/ F& [
  868.           {
    ' k. A9 A( Q$ b! G1 v( W" I
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 l9 ]7 b0 W0 G/ e
  870.             unzClose(uf);+ z4 ?8 h- g0 v7 K8 @- w; s8 ?
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; c: L+ W/ S/ ]
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");$ U) s) g- V  _8 n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' K, Q" w6 B, {" Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " Z4 F8 z4 u8 S  t. r8 c, H8 s0 K' ?
  875.           }3 O$ b+ ^! \1 J% S. H
  876.           DeleteFile("Wsa.zip" );
    2 e% Y2 k: q6 |5 K6 v3 f. I
  877.         }$ z" M5 D; I$ U" t

  878. 2 B, b- [) L. M( F! X3 M- Q
  879.         if(CheckLocalVersion())* L4 \1 v( K. I5 c
  880.         {4 {/ _' H. J- B3 _4 t6 l- b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, [% E2 A& S0 E, m2 p- D: ~
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    # ^9 N2 z7 Z1 {0 I& H# L
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% t3 r: W% z9 `1 o, J4 G6 d* x! v
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " R/ ?% f2 @) \' x" S' L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    + }1 d. ~% D3 D2 i( D% h
  886.           dwStartUpSteps=99;! P* `$ j+ {# n
  887.         }! Y9 ]- q% l8 j  V
  888.         else
    3 i& ]- H3 u2 e* V  g
  889.         {
    ! N3 r6 Z' F( v5 x7 J0 d; d- y
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 `1 A: I7 u. h6 P3 O3 A8 r
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 @+ d6 p  K& M+ y8 F; [' A
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & W. S. C7 s/ i7 C* \

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

" [' l  C  x. D" g2 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-15 07:31

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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