CSUpdate.exe源代码

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

4 L  B; ]/ G8 ?% D# Y4 n
  1. / RevApp.cpp : Defines the class behaviors for the application./ k% P8 t5 P0 ^: r8 _
  2. //
    % A- U  Z( ]- l( T

  3. * h% R. I2 R0 P) t1 |
  4. #include "stdafx.h"( \7 Z, E  X( P

  5. + B" z4 q6 B) C
  6. //#define UNICODE
    2 w0 h* z3 b: ^: S
  7. //#include <gdiplus.h>
    0 W* ^( O7 V* ?8 U  z5 E9 h
  8. //using namespace Gdiplus;9 |- ~* s, ^9 |3 L# r  J
  9. ! W! ~, K5 l8 N$ D% _
  10. #include "RevApp.h": R2 d, T. f  r) r% D$ f4 C2 {
  11. #include "RevAppDlg.h"0 M# g  \9 l: R% L! r
  12. ; g- N7 ^& j3 w/ }5 P
  13. #pragma warning(disable:4786)
    5 W; r7 X; a5 y6 ~- H; Q6 ~
  14. #include <map>& `& ]  S2 w" h- a; H6 o$ E- ]# p
  15. #include <list>
    ! u' j4 I& c" \( O# W; y
  16. #include <direct.h>
    * t- A' @" ^9 @' B$ y
  17. 0 H! l8 w' v; f+ l
  18. #ifdef _DEBUG
    " U0 K) Q1 L, v% o5 ?5 X* A5 V
  19. #define new DEBUG_NEW% \& |" K1 T) H2 ]) _0 V
  20. #undef THIS_FILE. ]# V" L0 _% R5 z1 U- E
  21. static char THIS_FILE[] = __FILE__;+ v2 P) W1 _2 h
  22. #endif
    ! ]" g  }& n# C+ j8 v
  23. #include "SkinResDef.h"
    # I6 v: V+ u# \1 u. x
  24. #include "ChangeBG.h") |1 c% d2 |6 q
  25. #include "AFXINET.H"4 k1 a& Q; c* o  T( ^7 [

  26. ( k( C: ?) M, }2 x/ D
  27. #define TRADITIONAL_CHINESE 0' @) o4 B1 ~( _3 A! E6 Z) M6 d
  28. #define SIMPLIFY_CHINESE 14 E& ~: o* D' @0 ^1 D, J
  29. #define ENGLISH 2
    / x" K# }1 l2 q7 p  u
  30. int m_iLanguage = ENGLISH;
    / t/ Z* ~: F0 e$ [0 L
  31. /////////////////////////////////////////////////////////////////////////////
    & t6 F! l7 D; A( y, T- v. x
  32. // CRevAppApp
    / u* V1 t% Z7 T  Q) A& s

  33. 3 Z; R0 g2 }- u% U$ k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( V' H5 n' J0 y: H# ]
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + g( \. j# N. Q$ S
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - S4 ]  n2 V  J5 Y% `* H, ~' ]
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 E; O# C8 N! L8 k7 W- X  j3 C
  38.         //}}AFX_MSG
    ! [9 ]6 i- X: p- j/ q/ L
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    * M4 }' u; w' O, S0 B/ W
  40. END_MESSAGE_MAP()6 a$ D: z0 }. I5 I( h& Z3 |
  41. " m, p2 x' `+ f6 s7 R* J0 n- T4 `0 Q
  42. /////////////////////////////////////////////////////////////////////////////
    0 A( S/ c- J, P. _
  43. // CRevAppApp construction
    # E& Y0 \+ c1 A& t+ k2 i
  44. 7 X: a4 N6 v0 w2 H" C: M% u
  45. CRevAppApp::CRevAppApp()
    % u+ j' c% i( O
  46. {) @* \9 G; o: t3 m+ R" N
  47.         // TODO: add construction code here,
    4 a, ~) J- z5 Z6 f) \3 U4 {- V$ h
  48.         // Place all significant initialization in InitInstance( @9 [/ \7 \( Q9 t. o5 @3 g/ g
  49.   bDisplayIsBig5=FALSE;4 |  j4 W4 E2 e- z6 w, A+ {
  50.   bRestartUpdater=FALSE;
    3 F4 ^6 p, V$ S7 v- [8 h/ C& T
  51.   bFinishUpdated=FALSE;# W# d' b- b$ w" Q+ L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: M8 s; W3 u6 @: m/ [
  53.   InitChangeDataBig52GBKS();3 u. t4 m$ G) o$ }3 M
  54.   InitChangeDataGBKS2Big5();
    - K+ q6 j' p6 ^" a
  55.         //
    3 M+ s% }0 K( W" n
  56.         bClickRunExe = FALSE;" Q0 Y3 l# E  l2 \& I
  57.         //: K" Q9 _: ?* {% }  n
  58. }% G! C) f; N; [# H& n

  59. 6 M7 K. T+ B; d2 ]
  60. CRevAppApp::~CRevAppApp()
    ' k& U, U  Q4 E2 m4 S
  61. {- C. R# U1 l& d( x$ x5 D, y
  62.         // TODO: add construction code here,
    * V% j( ^$ c7 b# M
  63.         // Place all significant initialization in InitInstance
    0 \, X, q. k% v0 r" \3 s
  64.   EndChangeData();
    " Y( ^$ I7 x1 q0 n! M. U
  65. }* J- V- l* }) U5 X- U
  66. 0 S) i* p' Y  r* N( [
  67. /////////////////////////////////////////////////////////////////////////////5 J" Q( T) A% @; T. Y
  68. // The one and only CRevAppApp object
    5 C' r: Y) ?+ y% o

  69. 8 T: u) V) ~# m) b$ V
  70. CRevAppApp theApp;
    4 U, I3 ^6 b' [( [7 y, p9 z! u
  71. ( r9 X2 i6 d8 s
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 U4 a% ~. O/ j  W) U2 L
  73. {
    7 O  V: H; w  ^
  74.   int iEOF=0;
    7 I3 R7 S# ]$ u
  75.   char szTempName[MAX_PATH];0 q7 X6 E: @9 C6 X  ~$ B; d1 O
  76.   *szFileName=0;
    : H' n* ^5 Y( r, W
  77.   iEOF=fscanf(fp,"%s",szTempName);% r) j# N( F! l8 N6 {2 I' T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 R4 [3 D4 y  H: ~
  79.   {& R) a, D; j/ ~  Y! k+ t
  80.     strcpy(szFileName,&szTempName[1]);
    6 V4 a& k% @! T8 Y$ T2 n/ Q# s
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) z' s$ m+ M7 s7 c
  82.     {. `. g' A4 s9 ?+ g' b
  83.       iEOF=fscanf(fp,"%s",szTempName);- [+ T$ u/ p8 c$ m4 P$ _
  84.       strcat(szFileName," ");, M( a; S1 U3 c9 Q& V% D
  85.       strcat(szFileName,szTempName);+ W5 P+ _5 {5 x
  86.     }
    % W0 p8 z+ l7 p/ @* _
  87.     if(strlen(szFileName)>=1)5 T, K, f2 ~3 W" T) m1 w
  88.     {- l( ]- C! |9 {& i
  89.       szFileName[strlen(szFileName)-1]=0;
    $ G% u! ]/ x+ A6 N6 L) K- k1 f4 j" b5 U
  90.     }3 p8 a7 ?7 V3 R
  91.   }
    7 U" b6 c; M, f) d
  92.   return szFileName;" {% y5 U7 o) h8 Z0 r  U
  93. }# ?7 g( ^/ v! g+ n6 H3 }

  94. 5 q) t4 h/ n5 x4 ]6 r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % j" V% i; g- x2 z2 o' A
  96. {
    : I/ n5 r) w; _/ \
  97.   FILE *fp;6 `- |9 i: K! }8 @$ A$ G
  98.   char *key=NULL;0 S. ]# K  S1 w2 B9 k5 Q
  99.   char version[MAX_PATH];8 @, b$ e. `( f1 ?; N0 l
  100.   LPUPDATEFILE file,olds;
    ) \& ~/ r  t+ Z: ?$ H1 l* C6 p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * E% n# s) w6 Q" z3 p

  102. * q% ?. p/ t! T5 K
  103.   UpdateList.clear();# N) |6 x5 p+ v9 x9 ^: E$ _
  104.   UpdateFile.clear();, e8 s& N7 U$ [% D1 m0 B
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! ?6 W; T& b, {( ^# A
  106.   if(!(fp=fopen(filename,"r"))) return false;1 n3 R, Z6 P- D
  107.   fscanf(fp,"%s",version);! T+ C3 U# x5 I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - ]1 h' q( P+ q- n
  109.   while(fscanf(fp,"%s",version)!=EOF)" E( b  x) U( u4 \9 L) @
  110.   {# k6 v1 ^4 Y2 }' R) S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & j- ^* g" u7 z! k+ m8 [
  112.     fscanf(fp,"%s",file->path);
      G6 L% Y1 Q* n9 C4 G- ^) a& Z( m) `
  113.     ReadFileNames(fp,file->file);
    . m3 m6 Q' P# [- Y! W- N1 J# D) C
  114.     strcpy(file->full,".");1 c' G3 N: m" t# o0 x* r: ?$ h
  115.     strcat(file->full,file->path);/ [) c) D, l3 k% }. E! ?7 _) w
  116.     strcat(file->full,file->file);
    - E2 P& r% I( z/ p6 I. W7 R/ \8 ~8 w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # W* G( ]" }1 u% C0 I- X
  118.     {
    , ?  p- u" D  q+ C+ E$ W1 R/ B
  119.       file->vers=(float)atof(version);* I8 D. ^6 U" H. `
  120.       UpdateList.push_back(file->full);8 l& o+ |" \; y/ }) P* k& ^; M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " \9 m1 C& p: _9 I! h" f) m
  122.     }
    " O% v% a2 I' d. H+ i
  123.     else! U1 b5 d1 D& y; B7 E% @
  124.     {  h2 J% J0 `# G' j& v" z# F# B
  125.       olds=(*p).second;4 |% O' z) j- M$ C. E
  126.       if(olds->vers<(float)atof(version))
    3 n/ e" O4 m! D7 X
  127.       {) P& M+ g! Q3 W: e
  128.         olds->vers=(float)atof(version);
    ( O5 [6 A  i6 J* B' N( u
  129.       }4 s6 L, g  C$ i9 G
  130.       free(file);. z* u  K& j' j; n: W9 s
  131.     }
    7 F" ^6 E: g$ m2 L. R3 e/ u
  132.   }+ Y( m4 J( u& x* q, Q
  133.   fclose(fp);- I2 R5 A: [: h
  134.   return true;
    * ^) l% ~% c; I, Y7 g: h
  135. }
    ( W9 A5 h, M# W3 w0 m: t
  136. * h+ E# B4 h+ H0 }3 m& F/ a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 ]4 b; F2 V2 ^( y4 h+ Z
  138. {
    $ Z* E; M! Q# ^; r
  139.   TCHAR  szFull[MAX_PATH];
    % B  |1 V& o9 V  }3 J
  140.   TCHAR *token,*inter;# i2 q( Z$ b3 m
  141.   *szPath=0;
    ; u1 X$ a: t! z8 D
  142.   strcpy(szFull,szFullPath);
    $ m' i9 A- A  L7 ~
  143.   token=strtok(szFull,"\\/");1 ^- k5 B0 M1 M& e* C) N* d) \* p
  144.   inter=token;6 {, ]  l  s* e. S
  145.   while(token=strtok(NULL,"\\/"))
    ' }7 W% Y# [' G$ h4 ]' ~; i
  146.   {
    , r; v( H3 L/ |. W. z
  147.     strcat(szPath,inter);! L  J7 P* y' W) Z, a' |
  148.     strcat(szPath,"\");% A4 ?. W+ p0 p* y
  149.     inter=token;! d+ B0 D5 x5 J, J
  150.   }
    ; `5 j- {+ w% ^9 Q! }3 j" Q
  151.   return strlen(szPath);" I" m' S" s, z/ {( H
  152. }# q; M1 c: N1 C8 o

  153.   h; @1 l/ M; p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; \8 A2 M& H- f+ T8 ~
  155. {1 h) `) b. F9 ?; T' X* o  ~1 S$ F
  156.   DWORD attrib=GetFileAttributes(Target);% n. c; k; N  w5 S  z$ B, l( U+ W  M- v
  157.   if(attrib!=-1). u( G4 T+ W7 O$ C7 C* {
  158.   {6 y, p) B/ S% D3 b+ X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! e4 q& W$ M5 |% P8 J% y
  160.     {; ?9 n2 O, T! Z: e) N3 h3 Q, p- Y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + T; S1 `( u5 ^$ }- J/ {# O5 S& _1 u) `
  162.       SetFileAttributes(Target,attrib);
    , c0 h, i6 J7 t$ ?& e  v8 b
  163.     }2 W% x! y5 @) ]' u5 N) |0 U7 o
  164.   }
    ! m  r6 r; I1 k' _0 f1 v! M
  165.   CopyFile(Source,Target,Erase);
    9 p) [2 o: e: `! H# b& }
  166. }" b" n/ X  u( r* |3 |# Y7 A- l

  167. ) e. c6 y) v5 y0 J# R) Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( b; W, n2 \2 i9 r+ ^4 r' i( J# Y
  169. {$ u+ D8 b* Y" e# [& c5 S: c
  170.      FILE *fp;
    - H' C. w4 I& ]; c/ G4 {' w9 p2 `
  171.      char  szBuffer[8192];# J( z0 ~5 d( C# `$ |8 A4 V
  172.   va_list  argptr;0 M- a& ]  R4 f: m- a; r: K3 ~% E7 n
  173. ' t/ [2 E# q. c; u, G1 g
  174.         va_start(argptr,message);
    * Q, ^. q# {, O; v
  175.         vsprintf(szBuffer,message,argptr);
      @5 K9 M+ J4 y  Q, ]% x) e, \/ D
  176.         va_end(argptr);
    1 U7 f( B; ~8 w$ {+ z, }
  177.   fp=fopen(FileName,"a");
    ' ^0 }" Z$ z. E8 ~: J
  178.   if(fp)5 Y8 E+ \6 w8 N, O4 E& {" F8 @0 e" i# Z
  179.   {" N, ^* i! H, D( b! R
  180.     fprintf(fp,szBuffer);" T: u9 ?" q/ k: w* `) O1 X! g
  181.     fclose(fp);
    7 P. s, V- M7 }. {5 j. z
  182.           _flushall();
      ?! Q9 p7 j6 G, B  u. u8 ~% r% C
  183.   }  H+ w5 Z" y( e# {$ _0 D2 @
  184. }- Z) k9 P6 Q" h6 p; o8 q& j

  185. - Z; w, c0 P' h" m" O. a: A
  186. BOOL CRevAppApp::Fclearf(char *FileName)- B  M- a. \6 ^, v7 N! [
  187. {* a, @6 b& I+ V7 Y! H, v3 `
  188.      FILE *fp;( J2 r' a/ X" S  i
  189.     DWORD  attrib;) [# C2 d- L, O9 ^
  190.   attrib=GetFileAttributes(FileName);
    " v' g0 F3 j2 w
  191.   if(attrib!=-1)
    : r  v: {) c9 q9 b! O
  192.   {
    5 {6 m8 X' X- \) R# _; f& E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ ^; X& g# G+ `
  194.     if(!SetFileAttributes(FileName,attrib))2 y2 W0 f' }8 t% ?
  195.     {
    6 L) u& f. Z9 z+ y! n% N; x
  196.       return FALSE;
      I7 ~  g6 d3 r0 J
  197.     }
    2 @3 t* I9 t* p1 N; v. g
  198.   }- Q) ~7 }( a# s/ n
  199.   fp=fopen(FileName,"wb");
    " b5 V6 B" _' n/ l0 c$ E
  200.   if(fp)
    & P: C* F; Z6 Y) c2 x/ `7 A
  201.   {
    * c2 t! q" p2 ^0 K
  202.     fclose(fp);( k# W6 v/ T# j5 E, S
  203.   }& r* g, z+ E# _/ ]2 d! l1 t
  204.   return TRUE;9 i" F9 H5 m5 S
  205. }8 L" @. r; h* e! U; y$ n

  206. ) b: I6 j' t# u3 e; h1 E7 D! T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' U" C! H4 f3 Q
  208. {4 ?- D1 q! K( Z9 V2 z; c6 i# \
  209.   char filename[MAX_PATH];( T7 j- i8 `0 K* w! Q1 X1 N
  210.   LPUPDATEFILE file,olds;: @  |% H) R( j; v8 F
  211.   std::map<int,CString>::iterator i;: U6 w7 n9 s# ?% O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . u1 _. h( z) a; t
  213.   std::list<CString>::iterator l;# b( j/ Q$ }0 R& a$ l) _& f

  214. 3 _& {9 [  C( k2 w. x! U
  215.   if(bFirstUpdate)/ w# M5 h7 x; s$ y- @
  216.   {
      |+ Y) d- f+ M+ I8 m+ w
  217.     dwCurrFile=0;! o; d# u  q4 q3 f; n& S# e/ `% ~( ?
  218.     bFirstUpdate=FALSE;
    $ e4 }9 w7 r. V4 n3 [9 G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : U; S! s. c* |6 B$ }
  220.     {+ W- X& {" u6 g& w: `
  221.       dwTotalFiles=UpdateLocal.size();
    7 w) n) }' ?; h' R8 V* D4 V. \% `, s( V
  222.       dwDownLoaded=0;
    $ e, @. k& H" g  M0 A/ J3 _; v& W$ M
  223.       bSilentStep=FALSE;
    % n4 {& A, t& S$ Z
  224.       bCompressed=TRUE;
    - Y0 {8 Y4 y! {8 K' {2 F* P
  225.       strExtLocal.Empty();7 Z1 ], G0 e) G- Z' P4 t% }
  226.       strFullName=(*i).second;
    $ B3 g! Z1 a) y6 _0 r' x( `
  227.       dwProgramState=AP_CONNECT;
      L: L4 S6 x) {# I
  228.       return TRUE;
    : k( N7 U" X# y, n% y$ W  r
  229.     }
    + ~$ F9 o3 h* p- e
  230.   }
      J* V+ l* K  v  ~: _
  231.   else if(bRestartUpdater==FALSE)0 q! m8 t/ }( y% L7 C
  232.   {' U0 j$ }: P# c+ q( \) ?( t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); ]# l& Z; y; P9 F" N+ w
  234.     {9 o1 K0 E: k! z7 {
  235.       file=(*p).second;
    ' z4 v6 i; h- e7 y/ U/ I3 U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( e0 u! @/ z: ?8 W
  237.       {
    1 S8 P7 U9 U$ f. P
  238.         olds=(*p).second;% U, K5 v  q, Z: P/ }6 a: C1 |5 ~0 r
  239.         olds->vers=file->vers;
      s7 J- _8 Z0 d3 T
  240.       }
    7 Q# E) G' n( n
  241.       else
    $ X# h) u9 c1 j! h4 |: F
  242.       {
    3 T' C& d' L( A7 E# C2 g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % O/ U- Z, N( \
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # p( G; m3 G5 j; u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 D/ V- K1 C1 Y6 B3 \) E4 q4 i  ~
  246.       }) i- H  B1 w" R0 N( A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) W3 X2 V- J8 H) x
  248.       sprintf(filename,"(%s)",file->file);, U# z4 [% E+ Q/ b* u
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , X, x. B; l2 k" T
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : s. u6 t. ], u8 X4 o
  251.     }7 I; }% i. ^7 j0 P
  252.     dwCurrFile++;
    & F  s9 B, _, h+ g. ?3 _6 O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): C1 f% p6 v$ p' b7 `; p* C
  254.     {; L, ]9 M: J" T$ I0 ], c
  255.       bSilentStep=FALSE;
    , U4 }, R0 }0 }( A
  256.       bCompressed=TRUE;0 \! `2 [. [# n7 w5 V
  257.       strExtLocal.Empty();
    2 Z. Z# g* J0 b9 U" e/ A
  258.       strFullName=(*i).second;
    8 Q# M, Z3 C/ a
  259.       dwProgramState=AP_CONNECT;
    9 L) ]& y3 u1 y9 `
  260.       return TRUE;
    4 }& B* g" s8 T1 q6 G
  261.     }! x( b; y  G7 }) |8 U
  262.     if(!bRestartUpdater)
    & R9 v. o/ S+ ]6 p& C
  263.     {- r  {( d, S1 j9 }4 Q6 g' s& z
  264.       int iCurrSize,iFileSize;3 X$ F$ B/ ]# F& _. M
  265.       iCurrSize=0;
    2 c' f7 G& W% L' @; B' T3 E- f
  266.       iFileSize=UpdateList2.size();
    1 {5 h$ F8 N& e1 F/ b) i: [* r7 B7 w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / t6 W, f% y% s; T
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 }. V2 z8 E5 d
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 v2 P. ~7 N! r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 D$ i; _4 u4 k# U" ?: t/ t
  271.       Fclearf(".\\update.dat");
    2 d* ?4 \3 S8 i0 h3 W# r( [$ T
  272.       Fprintf(".\\update.dat","Bloodyf\n");
      X; f6 Q) Z6 e7 M+ T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- ?1 Z5 x+ n  L- {/ P" H% D0 s
  274.       {
    - d% Z. A) K- G0 j& L  v1 w' U
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & [" E! _+ Z; ~: O7 x4 R/ s
  276.         {
    ) {6 I% ]- h% t. w4 p, K& T
  277.           file=(*p).second;
    ; c$ t+ F  ]- [, s
  278.           sprintf(filename,"(%s)",file->file);
    ( k/ ?1 Y; O- z9 L5 k, h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 ?& F6 e$ D9 S3 q0 a# z
  280.           iCurrSize++;( {6 \2 G9 D, d: C. W! J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # n  l) k3 _# |$ t
  282.         }5 L* d. V: m) O
  283.       }/ g" b, n* Y, q
  284.       unlink(".\\update.txt");
    6 z3 w5 Y$ ]; x, w  Q: L- K2 b
  285.       unlink(".\\update.tmp");3 E1 P) u; t2 d, ?1 b
  286.       Fclearf(".\\checkversion.dat");
    : a( K; |; V4 o; T$ C
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : R) P% G& J$ r" c; z4 V
  288.       if(UpdateLocal.size()): E7 p$ _6 k" P$ f" w
  289.       {1 v, ~$ P: H. d6 [+ K' O
  290.         UpdateLocal.clear();
    5 L0 N0 U" b" c
  291.       }
    & ]& [. k* `, k. |( p0 f* C' j7 P
  292.       if(UpdateFile3.size())2 F% @% Z* h2 s/ }
  293.       {
    9 Y5 l$ m% S- g7 M: K" [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & }6 m6 S+ s$ S8 L
  295.         {2 b$ _; r, F, @0 X% O
  296.           file=(*p).second;% V* r8 W) X" \% D! H: W) H1 v& F% n5 _
  297.           free(file);, {' ], u. o7 J" D% |1 T: E
  298.         }0 D/ O- p; A6 \8 w7 i
  299.         UpdateFile3.clear();
    * e' G0 F  {- P
  300.         UpdateList3.clear();1 ?, ]3 ]* Z. M1 l
  301.       }
    # s6 M9 R+ z( g) c5 z
  302.       if(UpdateFile2.size())
    & U# @# y. }, k9 E9 y
  303.       {% A. i- }: b5 y5 i/ Q: j- m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! [! h/ `8 ?; r3 U
  305.         {
    & S2 Z' ?7 x7 Q  @
  306.           file=(*p).second;5 b* U2 x0 ]3 @; n
  307.           free(file);
    ! a( Z0 ]) J8 c
  308.         }0 }& T' @: V4 p/ m
  309.         UpdateFile2.clear();
    ; ?1 [* P. Z+ K8 e
  310.         UpdateList2.clear();
    , {$ N2 e* m9 C2 ]4 L# J; Q. l. c
  311.       }" a- {3 j1 V: D; R
  312.       if(UpdateFile1.size())
    ) D+ i! f3 d1 N+ e- ?
  313.       {; \) T. K: x5 T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 {* p, X! T8 y# h0 ~
  315.         {0 _$ `) K9 @* S* ~7 }. Q2 \+ f
  316.           file=(*p).second;  m' `7 i' _) {2 Y7 X" z
  317.           free(file);9 p$ x1 U# p& n2 Q
  318.         }3 P6 t7 Q# X) Y2 p2 e
  319.         UpdateFile1.clear();
    + `0 _' h; |$ o: R
  320.         UpdateList1.clear();
    " V' D  s/ {# U# ?; C" T
  321.       }# R8 O9 \7 A6 V1 b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . a( O9 T( p+ B2 ]5 D) v8 N
  323.     }
    2 k0 F: k; u) N# y
  324.   }% @  H; O, y' Y
  325.   return FALSE;% x4 j! e: q) _/ e7 ]2 i5 n
  326. }/ R! X4 A! H0 n1 L4 C! J

  327. : o+ r7 E, l# _; _; D
  328. void CRevAppApp::ClearAll(void)
    , v4 l6 d5 ~! A# \# Z/ _: y
  329. {# r, O; r' j! H$ r8 a
  330.   LPUPDATEFILE file;# z8 T% ^7 C+ E6 h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      r: ^- T' F" h

  332. 5 W: ~3 o# l2 [. N
  333.   if(UpdateLocal.size())! t5 b3 @5 _  f- y( G
  334.   {
      R2 A  l" B3 _$ b: M# K
  335.     UpdateLocal.clear();# C) l3 J& F) {3 A/ x( C; L
  336.   }
    + z! K2 u) P5 ?: y$ g& Z
  337.   if(UpdateFile3.size())& n2 \4 s5 F2 R5 c2 F& \
  338.   {" T7 E% |; A5 Z* F: m3 }$ d/ L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& U$ o/ p( k$ r& f
  340.     {7 Z7 C8 r* c+ a$ v3 h' z+ D$ o8 d
  341.       file=(*p).second;4 D" z. L: z0 a8 l4 Z
  342.       free(file);
    7 Y1 ?" _7 R% h7 ]/ G- D7 }
  343.     }
    3 Y' C4 m& Q) N" M% N2 ?# P) ^
  344.     UpdateFile3.clear();
    " q2 w( y2 U5 S% E' n% O, Y
  345.     UpdateList3.clear();
    4 j* s" y) ]+ d6 w! }
  346.   }; r: I+ N! X2 }0 s+ H) u
  347.   if(UpdateFile2.size())
    # E$ r) L% l9 d
  348.   {+ O4 D; ?4 K8 l+ K. X+ x7 c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 B; X" D" u! z. _
  350.     {+ ]5 ?, c  G7 z1 s
  351.       file=(*p).second;5 F, M# j/ v3 J4 R
  352.       free(file);6 T: `4 y; c- l" Q( Z9 g
  353.     }' @1 ?+ P: N/ ^: s: `. c
  354.     UpdateFile2.clear();
    ; E/ Y5 k, U# G' L/ g. D
  355.     UpdateList2.clear();
    6 Y9 I: _, h9 ]1 i5 d6 l) b
  356.   }
    1 E0 m# y0 X1 G/ o  y
  357.   if(UpdateFile1.size())0 l/ e/ K% u% j% S) d8 ^* r
  358.   {1 n1 X& Q  ^: b8 p) u+ }
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). i$ p' s* q( H& i! s
  360.     {
      `% J: L, Q! q7 c# |
  361.       file=(*p).second;4 ^' g+ k  |5 e
  362.       free(file);
    ) v0 e9 _. s: I9 U! m
  363.     }
    . s! L5 }; C% ]7 ?% \9 D
  364.     UpdateFile1.clear();1 {/ c+ ?3 M& E* c0 w
  365.     UpdateList1.clear();' H5 I, E+ t2 l& j5 ~6 S
  366.   }8 E4 @0 F9 m2 P* y) e
  367. }  3 d7 R$ z2 @. `* b
  368.   
    4 |& R( m# ?1 y/ Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 j( A% t# n. w, w+ O: G7 d
  370. {1 n/ ]6 W  w% e. {0 ?
  371.   int c;3 d" C. [, A$ f% a' j/ c
  372.   LPUPDATEFILE file1,file2;
    # y; c# ]# F8 o$ H( X
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " M0 n1 a# P/ M6 e
  374.   std::list<CString>::iterator l;, v! y, x$ s( d$ g: A
  375. * q, _5 P8 o, ~" W. x. }" C; ]$ p
  376.   UpdateLocal.clear();; K* A/ s. t; L' y& ^
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( Z1 Q) ~$ s/ s6 M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! j" x# ^) i- g( \
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 l4 }/ U) V" [5 G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! t7 H5 h2 G$ f- V& x5 E& j9 r
  381.   if(UpdateFile3.size()), c2 Y3 ]' V4 p3 C( H7 V2 t) ]: a, D
  382.   {! z/ w6 Q, X; K) g6 _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & o6 m6 {+ I* u3 P9 @5 b$ u3 C
  384.     {/ e- }# r3 _: W( n3 R% F6 L
  385.       file2=(LPUPDATEFILE)(*i).second;. N+ v" d, s5 b! u" X, L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 W$ S) J' d* q& L6 q
  387.       {
    $ Q  l9 o: z8 n5 o
  388.         file1=(LPUPDATEFILE)(*p).second;( ]/ R3 ?  v2 ~! ]6 R' B9 {+ S3 a
  389.         file1->vers=file2->vers;
    % L# Q+ z& e2 ]6 k" W, N
  390.       }
    , _5 T) d5 e: Y4 c$ {+ Q
  391.       else" |! a; k0 s* k! M0 |, B& E9 z5 w
  392.       {4 }& _* j3 f- Y8 ~+ R$ Z! r0 Z- v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , q1 A% W5 L) U1 k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  W% o) m$ L8 d( S  `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 ^" b" a- |2 {! |  K
  396.       }0 G  p; ?+ N/ j: E8 C
  397.     }
    / o/ a4 F, t' [% J% n0 t5 M
  398.   }6 N: d; g8 u' o# n
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 j: b+ L& ]! p) c
  400.   {
    6 |$ j9 v! U6 q( w# t- t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), S# M* z; U) g% s
  402.     {
    ) i' Z5 ]# V6 m9 n& U
  403.       file2=(LPUPDATEFILE)(*i).second;& M! U& z' {3 L0 I# H$ n9 k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  R3 _+ S5 G5 f/ h
  405.       {
    6 |0 i3 q, l; n3 a9 m
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 P4 u5 w9 Z  i3 P  G" L
  407.         if(file1->vers!=file2->vers)( D7 v1 V1 @' I# O3 _% T, z- b
  408.         {
    ' m1 i$ b1 D6 x
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 N1 p1 c$ |( K
  410.           c++;1 K/ g1 t! f4 C3 W) Q
  411.         }" _7 U/ f5 _" U! ]+ a! S* ]
  412.       }
    2 C3 K; ], a' [+ z# N$ s4 B
  413.       else
    ! Y) h& g4 [' i% g0 x
  414.       {0 a+ j9 p& V8 q4 }0 N' H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 u: C# x9 ?; ^0 }' ^: G$ q- }
  416.         c++;. G0 G* r; ?: E  q% T& |& p
  417.       }- K% D9 G* |$ `5 D- t5 h, T
  418.     }6 q5 Q+ J" r8 j6 A9 T1 |8 @2 \- p* m
  419.   }
    + G) R$ ^" Y6 I/ J& E
  420.   unlink(".\\DownLoad\\update.txt");# t' u% a2 ~- N% T" [
  421.   if(UpdateLocal.size()) return TRUE;
    , Q6 T5 C5 B8 b) h1 {& H
  422.   else                   return FALSE;
    6 v* f1 p7 ]. X0 H  i" L
  423. }
    # Q" N& D' f) _( M% N7 w; a

  424. 1 U: R& ~) S6 Z7 Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 Z, {/ Y7 [/ E7 S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * x( z1 K* s9 k' S9 ~* f) A
  427. * g$ \/ d+ B. C1 l3 |

  428. 6 \# V( x& i* y- ]. _4 W1 H

  429. + }3 x1 o$ {( b/ @. @1 Q! i
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    # W- S; J% J: j
  431. {0 M+ Z) h2 O- a  L7 k( N: |# k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 n- V* R, \) J& f7 p2 V# G) ^
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " `% W3 v% D* F9 j. K, ~
  434.   {
    7 J) B$ E" J$ a7 w4 S! A
  435.     char szLanguage[50];
    5 O/ `  c. q1 H2 T/ `% I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ V" R6 h2 b' _5 i$ }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) M$ I& `" q1 X6 j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + ?7 u" p; y: ]% ~
  439.     else                                   m_iLanguage=ENGLISH;1 ^4 J% w# i/ M" H4 ?. E
  440.     char szRegister[100];
    7 W$ n. ~1 c" B$ l! C! z  S
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / F" d% c7 U/ p& C8 d( F" L
  442.     strRegsName=szRegister;' G& @, U/ X# L. X( v- M
  443.     char szPatchURL[100];; a& ]% V' ]9 i6 V; A1 J3 G  e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& R" W9 s/ I, D7 |  F* c( ~! }+ A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 H) o" W4 A: g0 S3 `
  446.   }$ a% t( W) l* C0 F. Y* i6 u
  447.   else
    ) s! r4 y) }/ l4 L# \0 A% I# P( {
  448.   {! z4 W, q- E$ @- p, t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ Y& t- ]( N; R4 i- [; Z
  450.     strRegsName=DEFAULT_REG_URL;
    9 v& o4 ^( [1 j5 ]
  451.   }1 c& @. `, d  k8 s
  452.   if(GetFileAttributes("hosts.ini")!=-1)& E5 t5 f5 w/ A- \
  453.   {7 G9 O  }2 R, H% @
  454.     char szIP[50];
    ' J& h5 `* e, l* P" ^, }
  455.     char szDIR[300];, Q1 I( Y) c$ W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 g2 q/ _& F: Q9 r7 n8 T
  457.     {" K! r  M& o6 r3 t9 S
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. r) Q1 v# Q0 |* |" T9 H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");, O1 b% t' x5 Q% O) ?& N+ t
  460.       strHostName=szIP;% u' E4 Q. d% p1 c2 |
  461.       strHostPath.Format("/%s",szDIR);
    , t* Y8 X# K/ D3 ~: n; m
  462.     }/ _4 i0 y, r' Q9 @8 Y
  463.     else
    / x& U9 \2 Z+ C) [0 B
  464.     {
    - N, [0 T- t) Z; B; f8 b0 S) M1 o
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ b; Z( T  w2 A1 ]0 A* v
  466.       {, D4 L' P" S! M0 c6 E3 P* R' E; H/ v
  467.         char szLanguage[50];
    : [6 g- _+ c. G. Q: M
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( u4 M; p' D7 i( b0 I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; g9 F# Q9 r- \; P0 U9 n/ h* N1 o* ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 e! M# G* s0 c. a: w0 j4 q) ~" j& b
  471.         else                                   m_iLanguage=ENGLISH;6 s; ]8 k- U& }3 `
  472.         char szRegister[100];( P$ _. w# G, k* T. P: l# W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - {* j& z5 U( r; h9 s
  474.         strRegsName=szRegister;
    - Y; M- p+ W8 R
  475.         char szPatchURL[100];) |$ ~! L8 C' o" [5 u) Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % c9 v  J" ?- G& z8 X! _. g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 L1 c5 H3 g1 H7 ~9 K
  478.       }" T9 e1 V/ c. f2 H; y
  479.       else8 w/ l! y3 b5 K2 c5 F3 I
  480.       {
    ' v8 S5 B" u8 A( U, p5 \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / W2 W. j) j  T" J+ l, c& R
  482.         strRegsName=DEFAULT_REG_URL;
      |: M; ?+ f$ b
  483.       }
    2 T4 }& V) R# o0 f
  484.     }; o% D; ^, f! x6 b" i1 z
  485.   }% i* ]' E0 q- U
  486.   return true;: O7 W+ j. H" E
  487. }4 M' Y" r7 L! B8 @/ U

  488. 8 D  y+ G  x& v+ O; N- v0 S: N/ h) `+ Q' n
  489. #include ".\ZLib\unzip.h"
    & E7 ~  T9 [4 `* d% Z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * {. \" ?- q0 S% X, ?' h
  491. /////////////////////////////////////////////////////////////////////////////
      Z4 ?+ J% ~7 I# a" r+ u* k$ y6 \& a1 {6 q: [
  492. // CRevAppApp initialization4 z0 P/ R3 g2 p$ I

  493. * Q. w: A$ `. f
  494. BOOL CRevAppApp::InitInstance()' S& k3 h9 M2 V* ]8 \7 ]6 @' i
  495. {. A9 l3 G) i9 a+ P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 N; Y& j" e, Q8 S* c  g, K6 N
  497. ! T& y) p" K3 R+ @% X: k$ K4 w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  x, R) y- q7 ?% m- [" Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " k3 G6 F. m# g0 s; Q) j6 L9 j' Q
  500.   {8 @) G7 M- \- d& N; k
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - A7 c3 ]" z6 C4 ~% ~( a" d! ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# q. x" U2 X. U  F4 R7 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : \4 {' y  ~8 _( {
  504.     {
    # h0 r7 R, n: s( M8 [9 d
  505.       strcpy(szPath,szPathTarget);
    2 |, q3 s) J% P2 Q* [! M
  506.       SetCurrentDirectory(szPath);1 N) n% }5 _! m6 t' B# C
  507.     }
    0 _" Y: ]) H# w6 t) _% l
  508.   }
    0 J- h; F! z% D. ^- Y8 ?: w! B
  509. #ifdef _DEBUG8 z7 m  n( i' J, x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 x9 |: A) Q# ^& e4 i
  511. #else$ {* A% d! a- `% }& m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 F5 q) m$ y- Q
  513. #endif
    ) s( S2 u7 D& ~8 G2 |
  514.   {( W+ u5 U9 O9 }
  515.     char tempFileName[MAX_PATH];
    . v6 |; i0 o8 U5 l
  516.     strcpy(tempFileName,szPathSource);& z- o/ Q$ K; t( W, t1 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;$ e4 A/ t3 B3 a" W5 v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & V, R1 u: \7 w
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    " S* O3 k" E+ c7 f9 n+ S
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 k4 E) g9 p2 f* u8 B" Q
  521.     return TRUE;  @* v( P' D0 q! f
  522.   }! E1 i1 b1 p$ i* k
  523.   // Nuke 0118: Delete run.exe
    ) w# k  |6 @  O) h" q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . l' N& e8 C$ Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / B5 T: {5 a4 z" p; ]
  526.   if(!ReadCfgFile("Config.ini"))
      g$ S. @" j) Z% {+ X% [( }- v
  527.   {" _6 l* Q* ~8 ^* o  v' I# e1 g
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 m1 C. z. m# V4 e
  529.     return TRUE;/ B6 m, o' F9 y
  530.   }1 X, a& m" C+ g, |$ [& ~$ P$ o- T
  531.   HANDLE mutex;
    - Q3 \- n9 b8 @& \$ B$ h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  A; t2 D* D9 S% Z4 s6 G2 Y
  533.   {1 ^6 b8 s- G/ S7 l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 v0 o! M, P, G. t1 c) u( l
  535.     {
    4 _4 _. A7 o! h7 m7 C
  536.       CloseHandle(mutex);
    / c) N4 ^0 j: X( L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 P- m/ a+ u, r  S; t
  538.       return TRUE;
    ( u+ D# K! b" i3 B1 D, `2 B
  539.     }
    ' H$ n+ @& ~. l" A2 q/ T
  540.   }  1 I' P. X, ~$ p5 n3 `
  541.   CloseHandle(mutex);7 ]: O) T% z# \/ l

  542. 2 o( l7 R8 m. a/ R6 U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # W- Y; P; L" j1 \# W+ E

  544. : Q0 n! p  |" H, e0 k
  545.         AfxEnableControlContainer();
    2 M, F- A; B1 _9 x4 \. |# g0 p
  546. ( [0 D" O2 d7 n" m, f" L, i$ y  s
  547.   bCanUpdate=FALSE;
    9 e! I5 Y) _8 @# e# X* w
  548.   dwStartUpSteps=1;  ]5 t- |5 p  d- m
  549.   dwProgramState=AP_NOTHING;
    6 c: c( m# x# s" X" ^. }

  550. " C1 v3 ?. v4 n! v7 [2 M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 k9 w" M# |" K. {
  552.   S3 n6 @+ B- s$ |; G' u1 ^, s
  553.         // Standard initialization2 {) u3 a6 W/ C) \( D  p
  554.         // If you are not using these features and wish to reduce the size0 F' ~  z6 [: {% @
  555.         //  of your final executable, you should remove from the following
    & C0 L% A# {. x' j9 A: M, S
  556.         //  the specific initialization routines you do not need.
    $ y, Z4 B  t+ k0 Z& O! Q& q  M2 w
  557. & Q! @4 \" R2 |5 ?
  558. #ifdef _AFXDLL8 P! B1 t. ?$ a- d; g
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    7 ]3 Q0 U/ D$ A) V! o+ a% }
  560. #else) u" B6 y& g' X/ `1 X% O0 A
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , J; `0 R' W: F  o( c
  562. #endif' @5 G$ o. {+ {' O- I2 _1 t
  563. # @! }; O/ v8 B6 A- U2 A/ W* p. `
  564.   dlg=new CRevAppDlg;
    ! i8 L$ i9 @' y0 j0 U$ j* B5 r1 i  Y0 o
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & N$ r9 s! B8 H: E. a# Z0 ^) t* j5 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 W+ F8 A) N$ v* F$ Z
  567.   m_pMainWnd=dlg;3 L, W# P, v7 Y4 ?
  568. 5 C7 w) X2 F) R. l3 X, ?
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; ?) m' _0 m9 r5 d
  570. * Q* N$ N6 R2 I/ R) ~- z7 j
  571. //  GdiplusStartupInput gdiplusStartupInput;8 h; `$ W9 p3 e& ^# m1 P
  572. //  ULONG_PTR gdiplusToken;
    ( I" Q9 ~4 [* H, R" [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 V$ @8 r7 D  d. E" W& q

  574.   U9 O5 C( E5 A$ A  q8 s5 ]
  575. //        CRevAppDlg dlg;
    - q$ d8 |" `6 R1 \
  576. //        int nResponse = dlg.DoModal();  m+ p  T$ k+ P" _/ }9 }' _5 r5 p
  577. //        if (nResponse == IDOK)3 e6 a& \6 D6 D# t' k1 y. m8 c  D
  578. //        {. D8 |$ j, f# Q" n" i" K  `7 N' T
  579. //                // TODO: Place code here to handle when the dialog is5 M. q' o* ?0 r1 I' d
  580. //                //  dismissed with OK( I, L# `6 a' q* j  z
  581. //        }( L' G0 [6 q9 U
  582. //        else if (nResponse == IDCANCEL)
    " k9 d# I5 f4 n, m& F
  583. //        {8 m7 @3 W* H% [" T" u4 V
  584. //                // TODO: Place code here to handle when the dialog is
    % r2 r4 e0 |8 {' {
  585. //                //  dismissed with Cancel
    8 D3 B2 H$ P" U" D
  586. //        }
    ) }& a& n  K: x
  587. 2 |  x) B' j9 h4 m
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % q8 H9 U, v8 }% B/ p
  589.         //  application, rather than start the application's message pump.! ~9 |. G/ L. ~( ~: q$ F
  590.         return TRUE;6 |. P  M% O: K8 l
  591. }3 e% |& b* g: R* a: I: B$ Z: l
  592. 8 W$ N: q* v) V, `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / `0 E, `! }9 g9 Z) p' D* U
  594. {
    % c! F* l  A9 C$ U; U
  595.   int i;
    7 Z3 o, _7 l  C% C; ]% `
  596.   char *szRet;, ^8 C9 D1 ]  `& T- }
  597.   l3 C1 Y/ Z) U  G  l* ]& `" p
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ! g: l! Z, O1 ~: Y% e
  599.   if(sztoken); e$ d) D/ T6 d
  600.   {: b1 a% @% x" [8 C
  601.     szRet=&sztoken[itoken];
    ' |0 i; {& D2 M9 h( e' i! @
  602.     while(sztoken[itoken])
    3 F3 z$ \8 n3 r, D$ e: e1 }
  603.     {3 Q; s# l# ]0 F4 c- f  [. T
  604.       for(i=0;i<(int)strlen(token);i++)
    1 J1 l1 l( n! a* i5 ~- A+ D
  605.       {
    % @4 n' a) c" P/ {9 c: A3 K
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # c+ e0 S. i- W2 P$ X3 z
  607.         {& P0 \, N2 W( C, b! D+ C6 G
  608.           sztoken[itoken++]=0;
    ( F# b. \1 y  v. r  J9 @+ g, K/ V
  609.           sztoken[itoken++]=0;
    + q1 _* \& |! @# ~1 U/ L3 E* g
  610.           return szRet;
      D& B* i; Y3 S: ?* R4 s
  611.         }! h, V' I" h1 S
  612.       }. X" P: \/ V9 i6 M6 z7 ]2 g* |
  613.       itoken++;
    . T' Q# ]6 ]% G5 w
  614.     }6 y  H6 m- c- G( Q
  615.   }1 Z0 o6 M7 E3 `1 v- T
  616.   return NULL;; p2 m$ P( |& Q1 T
  617. }
    7 N  p# {9 D: A

  618. 2 Q2 S% B/ x8 [6 v  z8 {( s
  619. void ProcessProc(long Total,long Current)  M1 I- Y8 p4 J1 h) r$ X: p
  620. {
    $ N& @/ j3 W1 C( ]- p
  621.         MSG msg;" T; w4 D  p7 E! @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " M. ]# c: J( g2 V3 z* _9 b: U
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " H8 y3 N1 C$ J& _
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ( M( F( X  `& D0 V
  625.         {
    / f. t( {! w; z
  626.                 if(!GetMessage(&msg,NULL,0,0)). C/ t4 \6 f- C" K+ x% _  _
  627.                 {
      p1 ]% G: R# L
  628.                         return;5 [  i+ N  K2 J
  629.                 }
    . r4 X. l: L3 J
  630.                 TranslateMessage(&msg);1 P4 M) M6 [& S# z1 e# @
  631.                 DispatchMessage(&msg);6 |2 m6 Y& m  H: D  ~, W' ?( v  u
  632.         }        * W' e3 M, p7 S7 l3 s
  633. }+ }: s% V+ e7 K7 S' W  z
  634. ) c$ X. u- q; y/ i: O1 t; C; x
  635. BOOL bFirstChar=TRUE;  E: R( x! `3 |6 j9 ?* C

  636. , i* h9 V: ~+ g; g0 L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! k, i! J) h$ ?- R- z7 O
  638. {
    ; Q5 i% A' ]4 N; L6 ]. V7 w$ o
  639.         // TODO: Add your specialized code here and/or call the base class1 c, o2 V) _" p% T
  640.   switch(dwProgramState)/ r( I! e8 b0 x7 m, |+ W; d
  641.   {
    * U& N1 K! [1 K# u5 k$ |2 e; p
  642.   case AP_NOTHING:
      P6 d! D, a+ m, `* j
  643.     switch(dwStartUpSteps)
    3 P% g8 ^& |# ]( [& \) j. P+ X2 T/ Q
  644.     {
    7 p- u/ H$ ?- N2 `% z$ X9 u# K
  645.     case 1:* U; x# Y# n, ~; a2 H
  646.       {
    % B. n: a7 {* Y, u
  647.         int i;, _. P8 K" r0 W  B# Q; }
  648.         CDC *pCDC=dlg->GetDC();& _! L% c: H: P$ |. T
  649.         HDC hdcwnd=pCDC->m_hDC;+ _$ U. z' x" t1 f
  650. //        Graphics graphics(hdcwnd);
    * W0 [5 _- N: k& X. m6 ^& \3 Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , y" l7 Q8 p0 y9 @- \# }
  652. //        INT iWidth=bitmap.GetWidth();+ N1 o; S9 o! e9 q0 A& ^4 S
  653. //        INT iHeight=bitmap.GetHeight();/ J& ?% B+ i' R0 B5 c
  654. //        Color color,colorTemp;
    ; D# B* ?+ ~5 B2 T" m; }8 D0 m$ r
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  l+ j$ u/ d" l+ B8 }7 D" l
  656. //        {3 F$ R. [4 _3 g. V& a  ]. W
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ ~7 R; S7 x- l' t
  658. //          {
    & M2 W- i+ Z1 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ j4 ^+ e  N6 J
  660. //            colorTemp.SetValue(color.MakeARGB(4 _+ T& E! r: K$ ?  F! F* A
  661. //              (BYTE)(255*iColumn/iWidth),
    7 e$ P  u! G3 u/ n' V: R
  662. //              color.GetRed(),$ |  w  J& a0 j0 U% z
  663. //              color.GetGreen(),
    - J5 H  @- i! H3 q& L
  664. //              color.GetBlue()));
    , R. Z% Z$ ^% Y0 ?1 G8 R# {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);8 X6 m+ Z) o! \3 D3 a
  666. //          }- f6 H" r! X0 |  f) K/ M& `" N
  667. //        }
    1 r, N1 U( x, {. b* m# O+ M5 H. c4 h
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 S% I2 j" P4 D2 ~* H5 Y9 r8 R- Z* O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& ?1 t) r! K+ b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 V: R! Z8 F) h$ b; J1 P
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 ?7 B% p' t4 ^  }4 I; L: w  \
  672.         for(i=0;i<240;i+=8)
    0 z- X( h) D  q1 a
  673.         {
    1 R% C1 w' C- O9 C7 L" I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! o; ^) a8 l' J* ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) ~# J# Q9 f5 O2 ~9 ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 \9 L6 g( c7 u1 I" p1 _1 |; T7 \* ?
  677.           Sleep(33);3 a4 n& I* b% T8 Z& m
  678.         }! L  W% p; y. U" N; l3 v  n' ^
  679.         Sleep(1000);
    1 G" w$ s/ H# [9 J0 B4 X1 `
  680.         for(i=240;i>0;i-=8)5 Z5 `% I5 J6 c. W* W
  681.         {3 e5 h- k$ e6 v7 w: ?1 @: d; @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 j9 H  X% s& [4 _! a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 l9 s: y. j7 Z& A* T+ x: g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * ~( M! a7 Z5 D" {8 w
  685.           Sleep(33);
    0 P$ R3 ^% V7 Z  x
  686.         }
    $ P; y" k: z/ A' c) M8 ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & ~5 e' y0 K/ N: H! g
  688.         dlg->ReleaseDC(pCDC);
    . d0 h% t$ D* Y: _% @
  689.         DeleteDC(hdctar);
    ) g$ C9 r  X. j# N$ K
  690.         DeleteDC(hdcsrc);+ \! m$ }1 S0 H2 U0 ^! W, D
  691.         DeleteDC(hdcorg);
    ; t/ ^; y- ^/ S' o2 X, A8 q
  692.       }
    ( ~, H/ l$ C) v- @4 e5 P3 E0 ?% k. ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% M. L+ q4 A- P2 y0 @  O
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");3 `4 O4 b# E' i' @) q& D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & W" [% [. e. E( u& T. {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 I) L/ C, i4 {$ x: O' s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - `( V3 |9 A- L; Z0 j
  698.       if(!Dn.Connected())4 F" K. U& I# U0 w/ a0 w* P. f- w
  699.       {
      I0 j9 |; U5 [( X
  700.         dwTotalFiles=1;3 ?; X% |- m9 T  i" t2 k) X% K9 P
  701.         dwDownLoaded=0;
    , a( L) F. Y+ a( `  c6 G: u: t* M; D
  702.         bSilentStep=TRUE;
    8 w  ~# V- ]1 W$ b
  703.         bCompressed=FALSE;
    ! D, w0 x- x' u( S
  704.         strExtLocal.Empty();$ ?* O- `% H* S* E
  705.         strFullName="readme.txt";  n) `6 a% w& X- v" d
  706.         dwProgramState=AP_CONNECT;
    0 N4 E: Q2 u: p; y
  707.       }
    1 R: G. }9 Y' v3 \. j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( K9 s, O3 M# J# @! \: j
  709.       dwStartUpSteps=2;# c) N* o. q, K" u  V
  710.       break;
    8 _, T* C/ q' k5 n* T& v
  711.     case 2:9 w/ ?2 ?% ]4 Y
  712.       {
    # G0 h' {; P6 [/ A
  713.         int iEOF;
    6 k, ?. j0 @6 [; P3 ]# R
  714.         FILE *fp;( R( l8 K; Y- c8 D1 J# z' a9 c
  715.         char szString[512];
    7 u* I# C# ]" ~$ K( C  v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" x/ ~1 V) G9 T9 F6 O* y+ x/ N
  717.         if(fp)" G7 h0 D! g2 B: l
  718.         {; G- c' \5 }+ x
  719.           do( W9 L# m7 p: V/ v. O/ S& G+ S+ u
  720.           {
      c" ~6 v. ^% X7 s( d8 R
  721.             iEOF=fscanf(fp,"%s",szString);" z9 E% z$ w) L' ^
  722.             if(strlen(szString))
    5 D! w& r: E' @
  723.             {, [# s" Q4 B( M# U% K9 O, A
  724.               if(bFirstChar)' ^/ ?2 o) ]1 Q  l: A; Z
  725.               {
    * i7 o4 z" Y2 K8 b3 w
  726.                 bFirstChar=FALSE;* f, k4 J9 ]0 {' Q
  727.                 bConnectIsBig5=FALSE;
    3 |0 {# B$ O% V  H# q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 J$ B9 e& s# J3 Z2 B. U, u) e
  729.               }; `9 h0 X1 L9 P, [
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 ~1 f' l5 i- t6 n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 u% k0 p- i5 s2 v+ r! p: v  q
  732.               dlg->m_ListText.AddString(szString);
    3 @" A$ d! C/ M0 k8 u) e7 }
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, \- m! P4 d3 F- @9 A( j0 R+ m
  734.               *szString=0;; z/ Z  N! x  z: ]7 {
  735.             }$ ^9 D% w7 [$ d4 u  m' T
  736.           } while(iEOF!=EOF);7 |4 b3 U1 ?, G8 l5 ^+ w1 x3 B
  737.           fclose(fp);
    % P& o& l( N3 T" T5 [' s
  738.           unlink(".\\DownLoad\\readme.txt");. h5 v% K! o7 N3 O: S
  739.           dwStartUpSteps=3;
    / Z' q4 N5 @4 W, Z0 K: N7 ~  G/ s% T
  740.         }
    8 _! [6 F3 w' i7 ]% F* a7 [# u
  741.       }+ L# a1 Y* T, M& r  `; s  D! ^
  742.       break;
    $ m, o' m( b% B# b+ O1 e5 M* }9 g* h
  743.     case 3:
    . e: x& n, ]) X1 R
  744.       if(!Dn.Connected())7 t6 @, I! `! W% s
  745.       {0 ?' B% B' i, f8 Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / y. t- w6 a- u1 P
  747.         dwTotalFiles=1;
    3 I! u' C+ Y7 x) U! p7 |; ]7 z
  748.         dwDownLoaded=0;
    & o" h0 ]7 o5 v$ g8 W/ S$ u
  749.         bSilentStep=TRUE;& s7 E* h# a7 ]$ |
  750.         bCompressed=FALSE;
    0 @+ \+ G6 s9 e# V; i
  751.         strExtLocal.Empty();
    4 F1 ~, ?3 }; G' w
  752.         strFullName="checkversion.txt";
    1 X/ J: L/ k9 ]5 R, v* [" s
  753.         dwProgramState=AP_CONNECT;
    $ S$ g/ [' C  `7 H) q+ S3 p/ I
  754.       }
    , X. d- Y1 p" s! s
  755.       dwStartUpSteps=4;
    + W' v5 l0 C' p# K1 m9 a  b
  756.       break;* s2 Z7 T9 T0 Q( p9 b
  757.     case 4:
    5 A2 ~$ P, N7 |5 k; V
  758.       {
    & A; T2 U. a# |2 O8 h8 n
  759.         FILE *fp;* C6 d5 i5 N- J& w# o( B- x& r
  760.         char szString1[128];2 c, p$ Q+ w8 i% G' j9 \& }
  761.         char szString2[128];5 V5 I& _' a2 o* m$ x( T4 o( T! h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( d. X! `( b: }6 b6 ?( x4 C( U* q
  763.         if(fp)
    * I- _* n9 y% z8 H
  764.         {
    2 {; c% N6 Q- U6 x# G, X
  765.           fscanf(fp,"%s",szString1);
    # N3 ]; P1 L# x7 O7 i
  766.           fclose(fp);% q7 U% S6 T( \0 r. S: B
  767.           fCheckVersion=atof(szString1);
    ' @7 A0 G& @. a& b9 v9 P& H
  768.           fp=fopen(".\\checkversion.dat","r");
    ! H6 T7 R! ^; i5 f& v# ~  J
  769.           if(fp)# K' S- J# t% o7 ?4 W7 ^; K
  770.           {
    1 m/ I1 m2 m: t: @; W
  771.             fscanf(fp,"%s",szString2);0 A5 j) y& Z$ l* x
  772.             fclose(fp);
    - C# c* K8 N. T1 ?$ t
  773.             if(atof(szString1)!=atof(szString2))
    * e, e5 Z& K4 D* x) n; [
  774.             {* Y; ~  O/ G3 ~
  775.               if(!Dn.Connected())
    3 e- d3 p8 H* Z& Z0 r; L
  776.               {8 R/ M7 p+ L7 I3 r
  777.                 bFirstUpdate=TRUE;& s6 ~& D) N( H: I7 H5 B
  778.                 dwTotalFiles=1;6 E' N1 p4 a+ W% |- O1 r
  779.                 dwDownLoaded=0;
    / P$ Y" q  P' C) W2 _
  780.                 bSilentStep=FALSE;! z! k' Y: ?: I5 X
  781.                 bCompressed=TRUE;
    5 L, P4 s6 ^; c% w! h, G$ t
  782.                 strExtLocal=".\\DownLoad\";
    7 x9 m5 f* o# G( R8 |
  783.                 strFullName="update.txt";
    7 E) C7 k: I1 n! c9 @. z/ `( U
  784.                 dwProgramState=AP_CONNECT;! Z" N+ k9 s" t6 N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * h9 u- N* M% Q1 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- v5 @) ?! }5 D  h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 o7 f* g1 b' A6 P2 r* {* p( q' d

  788. 9 E! [* U& N& X9 |5 l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 |$ f& s) I6 r  d' j' R6 t
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    " W  m" p9 B1 m% k0 I' O! U0 v, t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)9 D3 b+ w5 w9 [2 F
  792.                 {
    . _- q& h( l7 |1 d
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 c+ U7 m+ {) n; P5 f2 I  W# y/ q3 R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    8 ~4 w0 G1 P& Z  M- {! X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    $ J4 V; o( H9 i. H2 o
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 o" P" K+ g7 o# q: B
  797. ( S* G- o6 S# P8 d3 L4 l
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - Q; B/ x" E  L0 X* n, @- q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & k9 r+ C5 \# n4 S2 Q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + e% B( j$ G4 j3 Q7 ?: u3 ^- W3 e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( b  R7 N( B; o
  802.                 }
    8 T& p2 [2 V. O7 y' {
  803.                 dwStartUpSteps=5;( v6 @; k6 I3 V- y. L
  804.               }
    6 j1 X" i5 Z0 [5 z" i0 p
  805.             }! b+ G+ a( _' z8 G4 L+ ]  G0 G
  806.             else
    $ c9 p) M' D' H
  807.             {
    ) f1 c: f5 H( \$ l* V4 h
  808.               unlink(".\\DownLoad\\checkversion.txt");% x' f2 @/ u7 E# u$ r' F2 f" C. A, q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. Z$ b3 N7 ^4 Y. t. l+ Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 h# l; W0 M. d  c7 p+ w3 i' n# f4 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# \& Q4 t% h. z* J& K
  812. 7 h9 D9 n' q0 f, O1 A9 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" x4 w& h6 i' C# i
  814.               dwStartUpSteps=99;' X& [8 M# V$ D' q2 K6 R
  815.               bFinishUpdated=TRUE;
    7 V! ?) B4 d& q0 Z5 N; @; h
  816.               bCanUpdate=TRUE;
    * U7 a" D2 i% G: \% X
  817.             }/ s1 d# K5 B3 o- [2 _
  818.           }
    # d' E* N8 [6 g$ o: {6 p
  819.           else
    # ?8 Q5 u+ {6 T
  820.           {3 q# T. E, [( f5 V6 |
  821.             if(!Dn.Connected())
    * `& H0 d, p; d: |& s8 M* o9 P
  822.             {4 L0 O& O7 o. |4 v# h- i
  823.               bFirstUpdate=TRUE;8 x9 I1 P( n( D% r! c  J% f
  824.               dwTotalFiles=1;2 {# e0 X, q" Z+ V2 h4 i# Z
  825.               dwDownLoaded=0;+ j. Y! B( k/ Y) t
  826.               bSilentStep=FALSE;! B& x. L4 g9 @7 U  P5 Q% J
  827.               bCompressed=TRUE;2 H0 L' ~  A- q' @+ d. J
  828.               strExtLocal=".\\DownLoad\";% \# C6 Y: z+ w
  829.               strFullName="update.txt";
      |$ s1 t( m, |
  830.               dwProgramState=AP_CONNECT;
    ( h/ g" }: w3 V0 i3 Q% o8 D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % t. ~( V- _6 G4 [% o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  \( K2 t1 X" d8 V, R+ B* f5 z1 P
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ o% E3 n- {7 g; z" n! U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 `6 u0 A. P  C, W7 j1 @
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 o1 O, @+ M2 A* E) E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' r" \9 V! ^6 v
  837.               {
    2 R  m3 Q7 e( z5 n& {& B8 a0 m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( N0 c0 I, o1 t  o
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : a7 {8 ?; S* D4 @
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 c$ s7 |' u/ e" H) |; b/ U% J& x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 _# ?" {- z" b: z! Y, ?
  842.                
    7 t7 x* z1 ~+ R# y/ @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ \3 L+ K7 `8 a( K* f5 Y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' ^2 E/ R0 \$ g+ R* O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 w+ X) U& m! J% p; Q* ~* X4 D
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & k* G% e0 [( t( U9 L6 d2 W% i
  847.               }: D8 L% D1 h2 `
  848.               dwStartUpSteps=5;
    # u6 s# r( A  j# ^1 J
  849.             }
      L6 Q+ z1 u. P2 M! T
  850.           }
    6 D5 {8 z0 I, d
  851.         }
    7 v1 T# Z  Y% U* G
  852.         else9 y- v. v( z) O1 {% J  b: {, x
  853.         {' b! A2 u- Q0 h4 n
  854.           dwStartUpSteps=3;  `/ S" T- s. v/ H; O
  855.         }8 Q) s8 g0 v6 @- j* ?
  856.       }
    $ n  f, y4 p6 k" B: {; s+ {+ i
  857.       break;, \: d9 m* N$ ]1 Q! I. Z# I
  858.     case 5:
    , g9 R* v9 ]6 |8 |* _7 p7 M* C  v3 m
  859.       {
    9 D4 |3 B! M' F
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    $ u3 o5 i2 E1 t. O( k
  861.         {# |% ]4 a% O, S* P8 O5 ~: _, I# t& e
  862.           int opt_overwrite=1;6 g8 J" G) D( m+ J, b9 }+ X. P
  863.           int opt_do_extract_withoutpath=0;7 W( W% K% Q  s+ r# S" v
  864.           unzFile uf=NULL;
    ; M) F5 V: W  z; u
  865. # I* C# E$ @! l6 z; d6 ~
  866.           uf=unzOpen("Wsa.zip");: t- O& B/ M0 |2 e: K3 W
  867.           if(uf)' v8 D0 N- W+ d1 E
  868.           {; i" V5 k: m$ ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 Y! a+ q$ n7 U% D
  870.             unzClose(uf);" x7 ^( f8 S) {: W: [( G0 @1 y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# H6 @+ t5 U- g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");% o& c  f. B& _1 }3 t: n7 g* g, ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");" F; Y) ^2 x) y  ]+ \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; T( U" F5 ~7 t3 F
  875.           }
    # r* {( P7 ^$ x! d
  876.           DeleteFile("Wsa.zip" );
    ! B7 W, [, ]) a6 `9 f. t$ o1 p
  877.         }
    * t) ^, z8 ~+ l6 S; z9 |0 a$ i2 @: ^

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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