CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
4 T1 s0 L* Z0 s  _' \; J) h$ j' T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 Q! N' ~, [  b5 \& E* U
  2. //
    ) T- b. H5 ?5 i* q% ^& {9 y8 f) {/ |
  3. 6 x' k7 ]2 ~: L. `
  4. #include "stdafx.h"" k; J' v. t* e5 _

  5. : L) p6 J4 `* |5 d6 ?& `  z$ [2 l7 w5 r
  6. //#define UNICODE8 e  c5 r% W' H" b- T
  7. //#include <gdiplus.h>' ~: ^9 x" i4 m% z/ f) Q
  8. //using namespace Gdiplus;
    * `5 D& K" T4 P0 Z; }

  9. ! g7 M4 o$ d2 x" V
  10. #include "RevApp.h"( U2 \2 ?6 i* Z8 c# \8 }
  11. #include "RevAppDlg.h"
    - [. s' w0 u9 V& Y# N3 U5 n

  12. 3 u$ l+ i# ^$ p) Y% ?* U, y$ {
  13. #pragma warning(disable:4786)
    8 Q# H6 g) j; l4 F5 A/ p# C. j" \
  14. #include <map>- h: i5 P( _1 }( Q) l7 W9 ?4 u
  15. #include <list>
    , K$ e) u9 i" `4 I/ t+ L2 [  @8 D6 d
  16. #include <direct.h>
    8 X3 H3 O' s; s6 @
  17. . C5 h) a# v: }1 `1 B1 }5 e7 R( L
  18. #ifdef _DEBUG
    9 ?% v# h( i" @" z
  19. #define new DEBUG_NEW! [% @2 m! T  \' _
  20. #undef THIS_FILE
    5 k* E' c9 i+ m" d/ Z9 P0 P# {! S: [
  21. static char THIS_FILE[] = __FILE__;: i6 s0 @2 @5 g* p+ \
  22. #endif8 O/ E8 m& S- s
  23. #include "SkinResDef.h"- v4 r$ C3 P+ O# e3 q4 x0 Y2 _
  24. #include "ChangeBG.h"
    3 ?6 Z+ ]: P" }  p
  25. #include "AFXINET.H"
    + R+ ]  w! f- E$ T2 D

  26. & e6 v# q* q9 o- a- I! \
  27. #define TRADITIONAL_CHINESE 0
    4 L7 G! a! m$ q
  28. #define SIMPLIFY_CHINESE 16 l& V+ |3 S# J7 e" z4 v2 t
  29. #define ENGLISH 29 O$ u+ I5 g$ E4 c' Y
  30. int m_iLanguage = ENGLISH;
    % E, K6 I* U0 {+ z5 @; t
  31. /////////////////////////////////////////////////////////////////////////////; z; w9 ~0 S) r; o3 X5 ?4 v7 A
  32. // CRevAppApp
    . A3 U7 `6 e, }+ D) G7 ~% A" j
  33. ; S; i/ e7 q4 K4 Z/ Q4 a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    1 V7 P6 Q9 `' }" o0 d
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 R! b5 U! m, O1 e7 F" y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) N! _+ ^$ }8 d6 f- |" b* }  b7 J  U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : N7 J) Q* J7 j
  38.         //}}AFX_MSG
    2 Y+ S. c* n& w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( @+ Y4 x* P1 ^# H+ a/ k
  40. END_MESSAGE_MAP()8 z7 F: I+ z! m. x0 B
  41. 7 d3 L! b8 A6 |# `
  42. /////////////////////////////////////////////////////////////////////////////
    - ]# ~. v4 z# |) b( n6 u" r8 G
  43. // CRevAppApp construction1 R8 w# A7 y: B: ^; S
  44. # T+ M0 n, n; @. Z5 h
  45. CRevAppApp::CRevAppApp()2 u% j7 r8 \, x
  46. {7 k. S* m3 J# E7 }  N  D
  47.         // TODO: add construction code here,
    2 r* H# P9 Z) i' `( y
  48.         // Place all significant initialization in InitInstance- C& t. A; ^& l! B
  49.   bDisplayIsBig5=FALSE;; x! D/ C  O& Z2 e
  50.   bRestartUpdater=FALSE;
    - i3 u7 ]4 P1 U
  51.   bFinishUpdated=FALSE;. L  A0 m7 ^* J* p2 [: H8 S" L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 k2 Z; b* Y  O$ T3 ~8 f
  53.   InitChangeDataBig52GBKS();: O$ r1 x  Q. T* k* P1 m6 o% C
  54.   InitChangeDataGBKS2Big5();5 J1 l4 V8 _6 o( r, [. p
  55.         //
    ' S) }. b* L0 _- G' F3 U
  56.         bClickRunExe = FALSE;
    , i6 V3 K" A# |6 _
  57.         //
    1 _6 |0 c7 U. M, j
  58. }
    $ p2 D# x( n* D" S
  59. 8 n+ l! i$ R+ e2 @
  60. CRevAppApp::~CRevAppApp()
    , T! `' c, r# y* u9 D4 f$ b+ Y
  61. {
    * G8 {" p" ^& `+ h5 e+ {; u1 Y8 q
  62.         // TODO: add construction code here,
    3 Y+ i8 G2 G  F! C9 U
  63.         // Place all significant initialization in InitInstance
    5 u0 r0 u: F: y8 H6 O$ b$ l  Q
  64.   EndChangeData();" ^6 m" C5 R$ G  I7 D
  65. }5 H. E* S- d" ~7 b) t7 W8 R

  66. ! d# {* I3 P: Q9 p9 V% Q
  67. /////////////////////////////////////////////////////////////////////////////# t/ e6 ^+ f& c( @! U
  68. // The one and only CRevAppApp object
    % Q9 i1 P1 w" T! d2 _

  69. / f9 \# w9 K: l
  70. CRevAppApp theApp;* a$ \7 |3 ^5 ]1 @

  71. 4 I7 c6 o0 [5 b, t2 M( s
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ H: O) N. K/ I
  73. {
    5 X1 Q/ z: J$ n& M* ]
  74.   int iEOF=0;
    $ F3 S+ Q, z# T+ ]. y- K& @
  75.   char szTempName[MAX_PATH];
      Q6 t( L, v: ]/ M
  76.   *szFileName=0;/ @/ z* r, G  {' ]! r& N2 q
  77.   iEOF=fscanf(fp,"%s",szTempName);- j  P) H" ^0 v4 I0 n6 L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')/ d, u4 ~! e5 Z9 _3 g
  79.   {
    , [; u/ a4 U/ \0 d
  80.     strcpy(szFileName,&szTempName[1]);
      I3 Y% G1 P7 [6 G$ _
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    . N, _) M( ~/ s0 s5 \7 j) e
  82.     {' F# d/ c/ h3 H* V, N& d, j
  83.       iEOF=fscanf(fp,"%s",szTempName);* c$ ]7 f  |5 u4 J( F& @# d( j$ M9 W
  84.       strcat(szFileName," ");
    # V  c' |  q" r- U$ ?% J4 c. _
  85.       strcat(szFileName,szTempName);; @6 B8 Z4 E* F
  86.     }6 f, O2 E! C3 g) W8 {5 B- o- ]
  87.     if(strlen(szFileName)>=1)* P; c9 g" \" c+ a
  88.     {
    + ?7 L" F4 v2 H2 K& @& [" [# E
  89.       szFileName[strlen(szFileName)-1]=0;
    8 D; Y7 j; b/ ~, {0 }) h  u$ A
  90.     }7 R) r% Z8 p7 n3 [8 q
  91.   }
    * Q6 _7 S: `. p( v$ ?' p' n( D( O
  92.   return szFileName;- w$ d' k1 G5 N0 i1 e! A; g
  93. }# \. t) }3 c; [! y* }0 F
  94. 7 L- x, {- ^5 q# L8 o, \2 w. m# E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , J6 s, I$ \3 d+ C5 F' c
  96. {" Q# u4 I; v' O
  97.   FILE *fp;
    - l7 v4 `6 W. Y3 t- i
  98.   char *key=NULL;0 ^; L- y) n) Z) z; I9 O
  99.   char version[MAX_PATH];
    1 L) g5 O. u' F- a" o8 H
  100.   LPUPDATEFILE file,olds;
    ) v: V  J1 k& ?. O0 g5 X& l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ R6 t3 k/ S6 }" s

  102. 6 G" {( z" `) \  U) u; H  S
  103.   UpdateList.clear();" w/ d* s& v; R( i, L
  104.   UpdateFile.clear();" u- G1 ~  D( F
  105.   if(GetFileAttributes(filename)==-1) return false;
    + E6 F$ X% ?' Q3 ?: I6 j
  106.   if(!(fp=fopen(filename,"r"))) return false;$ `1 `) a6 }4 N
  107.   fscanf(fp,"%s",version);
    6 C" k$ x6 K  S( d1 n6 X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }  C7 X7 F) m4 W9 s
  109.   while(fscanf(fp,"%s",version)!=EOF)" B% a) ]1 g& C2 G% i* k8 p
  110.   {& Z4 E/ x# }3 A3 s2 E6 g' A( s9 M- X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 n) t# x: [$ S, }
  112.     fscanf(fp,"%s",file->path);( @# ^! `+ r+ z; l7 U
  113.     ReadFileNames(fp,file->file);/ @; ^3 I1 n4 H
  114.     strcpy(file->full,".");5 E: z4 p8 g; j7 t8 R2 C# q
  115.     strcat(file->full,file->path);
    % o- d+ F& R8 @% u6 {
  116.     strcat(file->full,file->file);8 ^9 {0 u, w" S! {( B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' Z" z1 ?4 _) e  U; r5 J
  118.     {
    2 b" {. w  X( a
  119.       file->vers=(float)atof(version);
    . X0 B. m# @) G7 k6 \
  120.       UpdateList.push_back(file->full);
    3 d9 P( B# `8 `+ W" h2 L. X7 d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: ^  k5 k5 p8 }( B6 t( E
  122.     }, `! P, N( F) g& d4 R/ K
  123.     else
    $ b' c5 \  s7 O" t& Z0 e9 W. z# Y
  124.     {8 v0 p5 }7 l( K. Y0 q( V
  125.       olds=(*p).second;0 n* E5 h! K7 W( z. e" W, a. [
  126.       if(olds->vers<(float)atof(version))& c2 h$ S6 D; H" n0 ]
  127.       {) w* `4 ^( N/ x3 \" z, z
  128.         olds->vers=(float)atof(version);
    ' |' P6 m; }; [( x& ~
  129.       }; ]$ P; W( D/ T! @3 ]
  130.       free(file);
    5 ~4 U! W9 N6 Y( \/ X' D
  131.     }+ F. l8 f  L% Q9 A2 }6 O3 N
  132.   }
    1 e/ S+ J( u, ]7 I4 ], a
  133.   fclose(fp);% L' z# s0 E2 X* U
  134.   return true;/ _- M- c! m3 U! p! M2 T5 n
  135. }' L1 F7 v% Q; C% l& h

  136. 9 D1 Y$ h- T+ O1 Q5 U, C3 T' |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  T2 I4 ~( _, b- J: G
  138. {
    , G" b+ K7 X2 j9 k4 N7 {: T
  139.   TCHAR  szFull[MAX_PATH];
    ; |. q- m  H$ c# Z5 x2 X" c
  140.   TCHAR *token,*inter;: o* c$ q: T' z
  141.   *szPath=0;7 e/ e. K! ?9 D; {- l
  142.   strcpy(szFull,szFullPath);) t. X6 A- ^. s
  143.   token=strtok(szFull,"\\/");, e- F$ |4 Y5 z  ]" \3 M( u! k
  144.   inter=token;$ P5 Q* _: @7 L! }) `
  145.   while(token=strtok(NULL,"\\/"))
    # h( B5 K& }' w% M+ {* O5 q
  146.   {
    % g) i0 r% f# X, p3 V, x8 N  e
  147.     strcat(szPath,inter);
    ( h& ?0 a! H" a7 [. R& g2 J
  148.     strcat(szPath,"\");# C# ^0 `9 T/ l
  149.     inter=token;
    - t* ?  M; P  g: o
  150.   }6 \5 A' W1 x) b1 {/ G# q
  151.   return strlen(szPath);
    3 c0 [, ^1 ?7 l4 c4 w
  152. }0 X% Q, N7 A) V: K7 S0 U
  153. . _, ^- i" [" H5 U$ M1 c1 A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# L5 k/ s& d& j& K0 S1 N( y0 j
  155. {
    ) ^. h. r+ B' M* t& D  o
  156.   DWORD attrib=GetFileAttributes(Target);
    1 v! F: @1 g) u; m5 J1 m( ?# ^
  157.   if(attrib!=-1)# _3 P3 E; P: J. J. D6 X" h
  158.   {* Y+ C  I2 f# `( Q8 {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% b- a$ ~/ a% e
  160.     {4 x4 u! n% j' T( ~* v5 f( @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 r# m" L1 [& M6 N9 e
  162.       SetFileAttributes(Target,attrib);
    ( [4 ^8 H9 V6 Q( a7 S  c$ y$ z
  163.     }6 d4 {1 h+ h% d, `
  164.   }2 _( S5 J( }4 L4 W; a
  165.   CopyFile(Source,Target,Erase);
    * J: D0 z' h, a1 i9 J
  166. }/ `5 f/ B% T4 k8 ?  y
  167. 0 }& F, {! w  ~* T
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; M- x# Y' p6 }# i' z
  169. {& V9 ~7 U- C# m% I$ M. o/ j
  170.      FILE *fp;
    $ I4 _: a* ~* p4 w6 S
  171.      char  szBuffer[8192];$ Y+ |) D  |7 S) {
  172.   va_list  argptr;
    0 Q. t  \, {0 B1 z! o, u
  173. ' n  L) t* c/ [
  174.         va_start(argptr,message);* w1 B8 D7 @: w/ l
  175.         vsprintf(szBuffer,message,argptr);
    % @5 I6 z( J9 h, M! H
  176.         va_end(argptr);
    ' o' R4 \: ]& S
  177.   fp=fopen(FileName,"a");
    0 t+ B/ T$ J0 C# j5 [$ T
  178.   if(fp)+ G9 ?5 ^1 y3 a
  179.   {2 ^! o3 [& m7 Z" D
  180.     fprintf(fp,szBuffer);
    ) n- b% s; ^( @
  181.     fclose(fp);2 M+ C0 y3 l! j. m& Q& N( |. M  L9 Y
  182.           _flushall();
    " c/ l* I3 f. o" Y0 j
  183.   }
    7 q' h% X5 o" Z
  184. }
    ) m: _) Q9 b  {
  185. 6 v- i4 k% i1 |, T, M
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 M- ]- ^5 O2 _- }% ]3 z
  187. {( W" r3 N1 ]& P/ N0 a3 D& a5 j
  188.      FILE *fp;
    - i, G8 e, q" U* W1 ~: d1 _! M* u
  189.     DWORD  attrib;
    2 V: _! i! i6 Q# L6 ]# a& {
  190.   attrib=GetFileAttributes(FileName);5 Y* d* S  f) K4 K
  191.   if(attrib!=-1)+ q- ~9 Z0 T- y9 S7 ~
  192.   {
    " V( k& a6 ]6 C0 p- L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. g' D( S7 B% m6 t% c
  194.     if(!SetFileAttributes(FileName,attrib))
    1 k" B( U7 Z: R$ Z
  195.     {
    * {6 @0 F) C0 N0 E' \4 M3 J
  196.       return FALSE;
    - [1 M, q) S  C! }* |. ]/ ~" w
  197.     }
    % Y5 W& L& g! ^
  198.   }
      p  l% \* K% Z& C/ T- q) b
  199.   fp=fopen(FileName,"wb");
    " [, f% p: U+ D* u# ?
  200.   if(fp)
    2 d+ E6 R5 N  M+ Z3 R# Z; ?$ w( H2 E
  201.   {9 ?; F7 Q4 q  i0 U- k+ D0 I2 B4 b
  202.     fclose(fp);
    " a, F% d0 N8 Y- X; T8 u4 Q
  203.   }
    + X  e! Q7 a0 W* n
  204.   return TRUE;
    - Z# K! [/ b) s. v, l: U0 L6 n
  205. }  S9 Q3 T$ \: S; f3 j. r1 W
  206. 1 N, U" a7 u4 U, e4 \6 T8 k: ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + V9 `; c0 x$ g
  208. {
    1 ~: V& g/ C7 u2 T9 O! q3 @# v$ X
  209.   char filename[MAX_PATH];8 l' \4 {' o5 |; N  d- m3 {
  210.   LPUPDATEFILE file,olds;
    9 \0 m1 n/ Y: G# M3 W
  211.   std::map<int,CString>::iterator i;" I, d1 D' ]; _0 \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( g/ t! y& E% a2 ^! J
  213.   std::list<CString>::iterator l;
    - Z) C/ c( p* V! Y- |" D

  214. 1 e! g: H- D4 h3 ]' u& I; P7 u
  215.   if(bFirstUpdate)
    : U+ h9 Y: S% n! H" u
  216.   {9 f# c; o) i$ @% N3 e
  217.     dwCurrFile=0;
      H5 T' N  A3 b" R: A; H
  218.     bFirstUpdate=FALSE;0 M8 y/ b6 [( m' |8 z  [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' K& z( ?; _8 N; p7 s2 c' U# L
  220.     {' B4 y- y" A/ X9 `; x8 ~$ x8 y
  221.       dwTotalFiles=UpdateLocal.size();: i+ j6 s. ]5 Q
  222.       dwDownLoaded=0;
    ! d0 G5 y: }" y
  223.       bSilentStep=FALSE;
    ( M- Y/ _: f# F4 N/ Z9 b9 a
  224.       bCompressed=TRUE;
    & u9 @/ H3 h' F2 g1 f; v7 @
  225.       strExtLocal.Empty();
      R+ K# J* O" B
  226.       strFullName=(*i).second;2 }1 c# k& h  b/ N; Q2 a. i
  227.       dwProgramState=AP_CONNECT;8 H3 v" @; z/ _" O$ |5 F# x: B
  228.       return TRUE;: P5 J9 i9 `" @: |: J% Y
  229.     }$ ~" _7 r' [/ j: D
  230.   }  K* A* M5 j# {: J6 ?$ F6 Q( R
  231.   else if(bRestartUpdater==FALSE)
    " c; {# G7 [3 H! e. n
  232.   {: J4 y, Z. |# B$ H1 w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())$ B5 L% N( V/ F! j+ v
  234.     {4 e4 O* o4 M" K. n1 A# i: ], \
  235.       file=(*p).second;
      O( V5 k" x4 ?& ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! {9 S( `+ Q6 c9 ~1 M$ r
  237.       {% S3 f( f( B  \8 h1 q
  238.         olds=(*p).second;
    . D9 U: I' ^0 |  Z) H/ z, F
  239.         olds->vers=file->vers;
    " f7 _% {# x' t# E2 e9 V3 Y
  240.       }
    0 Y, F2 p# I, }6 k4 S% {) ~( z9 _
  241.       else1 Y( P$ n, F3 f  L! N* ]
  242.       {
    , T0 X3 Y& }+ B' _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ w$ a6 P* _8 l5 k" g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( M  U5 S9 V4 w& s" |# W
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! w" F+ I4 M& B
  246.       }9 F% w3 s5 |6 b* p3 a9 }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    3 Y% d5 N% D. M# g8 s% q1 B, e
  248.       sprintf(filename,"(%s)",file->file);5 d$ [5 A% G6 R; Y: P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ Q# X  a6 U  \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. @) B) K( x4 V2 ~! }: R
  251.     }
    $ [7 R9 A" L9 ^
  252.     dwCurrFile++;  m9 j: n% g! ^7 V; y$ D7 o: F
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - J" n" `$ H+ ^" r: N
  254.     {4 w! k; H2 a- a/ P' m" Q8 T
  255.       bSilentStep=FALSE;
    / F* i6 |4 h6 G
  256.       bCompressed=TRUE;  [5 ^7 r4 M$ s8 J) p
  257.       strExtLocal.Empty();
    + p+ }' [" R% m- u
  258.       strFullName=(*i).second;
    : J$ B9 C; W& b
  259.       dwProgramState=AP_CONNECT;
    4 s' J; D9 ~  b/ w( z
  260.       return TRUE;
    8 t' P2 G( B. Q3 h
  261.     }6 H  o8 \! y  j3 w% w/ C
  262.     if(!bRestartUpdater)
    % i9 n( W! U% O; Y
  263.     {/ V4 s0 \3 ]1 i7 q+ S' r8 B. y
  264.       int iCurrSize,iFileSize;' z: u, X& o3 E5 s! @
  265.       iCurrSize=0;
    ( ?/ D+ D: t' }5 ^
  266.       iFileSize=UpdateList2.size();
    2 O( c5 V$ a: z# s
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 f) B; @! v# e' ^. P' R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 w8 @+ M2 D* U9 k+ [: f
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 N9 x4 E  D. \1 G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 z! v" k9 N  T1 a# y+ R( x& G% S
  271.       Fclearf(".\\update.dat");
      v  ]1 T# ~% R; a+ Q& R$ z0 w
  272.       Fprintf(".\\update.dat","Bloodyf\n");' @; d9 O" j, T5 Y, F# C
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ `- [' o. p. s6 d2 v' @9 V
  274.       {$ B# H. G, C  m( k1 Y) s3 J  C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 D% E! ~0 b# a$ V
  276.         {
    % m3 I; s6 p  S/ @- i
  277.           file=(*p).second;9 r; V* ?: ?# s9 U1 D
  278.           sprintf(filename,"(%s)",file->file);
    6 r  s9 F* b: P$ z% h, E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# W1 @; \) e1 y6 ]2 l
  280.           iCurrSize++;
    & A6 R/ u# {; U4 u  H6 x. H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 O/ H/ o( B  o$ z0 [) W
  282.         }; X7 g2 ?- R4 V2 t) s
  283.       }5 F, p& w. f! \: E& K: M
  284.       unlink(".\\update.txt");
    . N3 g( P- l( X" d: N) t; e- A
  285.       unlink(".\\update.tmp");
    6 T9 d2 s! q. q
  286.       Fclearf(".\\checkversion.dat");
    & _$ D7 Y+ y- W6 N1 w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% P3 p# `/ P7 j  L" u0 B' ?
  288.       if(UpdateLocal.size())/ ~- u, r( f" D9 q
  289.       {" z( u1 W; _9 |$ V! N9 M7 p
  290.         UpdateLocal.clear();
    $ Y: M, j1 h8 x$ c8 N. R7 ~5 ]5 t8 j
  291.       }
    - u) M8 P9 z5 R8 M# f
  292.       if(UpdateFile3.size())
    + u( p9 S1 O; G
  293.       {
    : t( j4 r2 t. z- Q" M0 J! G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). L- [, h8 d1 }6 Q
  295.         {2 E% k$ P1 v# n2 B; I! K& p- \( q
  296.           file=(*p).second;
    + ]' [0 w9 z+ F) H! s/ Y
  297.           free(file);
    # I  ?6 v9 E% n( m. v
  298.         }) `1 A6 _( R. U" T) Q
  299.         UpdateFile3.clear();
    7 ?3 k' [% r, I- c1 o+ h5 s
  300.         UpdateList3.clear();2 a0 p* Q, q1 o4 j5 \! y. j1 E3 n
  301.       }' T* p2 `: O" ~5 [/ K/ K( L
  302.       if(UpdateFile2.size())9 B% u5 s' w* D: S! M) T: N
  303.       {6 R- ?' H! Q: |' |; O0 ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! [6 p, H; g/ t. x" G4 S" I7 d$ t
  305.         {( p3 l% [/ b# X
  306.           file=(*p).second;: {* c( j/ E2 M* V
  307.           free(file);5 i* [" K0 ?* Q& @& U  ?
  308.         }
    1 ~* M8 x. r/ Q  E6 V5 e5 L4 B
  309.         UpdateFile2.clear();
    % r! y: B, J! N: S1 B% ~6 x
  310.         UpdateList2.clear();
    / X# H( T* O" k6 w/ V: Z
  311.       }
    1 E! t" \! L% Y& `* T
  312.       if(UpdateFile1.size())% S0 }* _/ d) W1 Y- V7 E% o: K
  313.       {& p2 w5 N4 G# d4 O% A/ x3 q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 K8 v4 j# v, R7 S* ]% p" y
  315.         {% y$ Q- F8 Y3 V! I7 i* C5 w  V
  316.           file=(*p).second;' P) l  b+ g+ W6 [; v! y2 |
  317.           free(file);. b' b8 U; R' X* n
  318.         }/ B9 M  i  G& ~, v) r# _
  319.         UpdateFile1.clear();
    9 W- E9 X& X4 K$ F
  320.         UpdateList1.clear();3 O& {# m* A3 {. O  H( x
  321.       }
    , x) u' ?/ r$ f2 u  d& q) }& |* A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    " ?0 O7 G( X( `6 X6 V2 y- _
  323.     }
    ) @. F/ c& W' L$ Z9 d
  324.   }0 Z& L; j3 Y- V* l0 l
  325.   return FALSE;
    ; c1 E9 t5 n: T6 B' N& ~0 X$ u
  326. }! y1 e. k& Z1 i" |5 U! V+ G

  327. ) h& M4 X7 k9 u  |, u( t7 T
  328. void CRevAppApp::ClearAll(void)
    / G+ ?0 P" f' z+ P9 Y) ?
  329. {8 J& o; [. e" b' J# l5 o
  330.   LPUPDATEFILE file;
      `+ }# D2 I/ d- B, b1 ?" B  m  T
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* y, o8 {4 w) e4 N/ M

  332. % c5 l/ W7 z! O( `! h: J: R
  333.   if(UpdateLocal.size())
    7 F+ @2 v8 M) h8 s7 E6 C
  334.   {7 r/ C4 S9 a4 R5 W
  335.     UpdateLocal.clear();
    ! Z/ E6 g2 ~1 a6 e* C
  336.   }9 q+ ~7 G$ D2 ^( \4 H; B5 Z$ k+ D& N
  337.   if(UpdateFile3.size())
    + O7 a% [! e8 O* J* f! S) b
  338.   {7 X- l2 w* U/ ]# y( f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ n( P/ s* N( e; `7 |
  340.     {
      W6 R' F, _, q& b4 Y$ O6 l, Y
  341.       file=(*p).second;
    # O) H% _7 e9 w+ J8 {
  342.       free(file);
    . S+ E  K" C' }. @. Y
  343.     }$ ?2 O  ?2 L( G+ V" {
  344.     UpdateFile3.clear();, u. U8 u1 U: ^# D( b- p
  345.     UpdateList3.clear();# i* f7 P, R: |( T4 R
  346.   }" M# Y6 i1 {- k) d( h1 ^
  347.   if(UpdateFile2.size())
    " ~* n2 j" n0 G* t, A
  348.   {
    3 M, t1 p  O& B3 @
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& G6 R3 n2 B& |0 \
  350.     {
    0 R( [: e# c$ h+ Y- z" r' H
  351.       file=(*p).second;) ~8 |  }9 k0 V" n$ M
  352.       free(file);
    : C, m0 S3 U. w  _+ Z( R
  353.     }8 P$ I# J. f5 c, l1 l" y
  354.     UpdateFile2.clear();* W' \# o  n! t9 o; b+ E
  355.     UpdateList2.clear();
    " Y# N9 j  _7 u& P
  356.   }
    $ U+ o8 K# `# c( J- ?. s
  357.   if(UpdateFile1.size())
    - C  j4 |/ u* q1 ^- J$ p6 `
  358.   {
    : s, D1 H7 F5 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ y# J9 u5 e( ?
  360.     {
    9 ?. P7 r6 j8 n: {) ^% W/ X9 r
  361.       file=(*p).second;7 o1 z7 U" q. u8 t
  362.       free(file);
    8 G# i7 J% D' y0 {8 E
  363.     }
    # p" d/ ~+ O& M3 X7 M  f- K
  364.     UpdateFile1.clear();0 i2 x* N1 E, R  u
  365.     UpdateList1.clear();% `: p+ f: y) c# ~4 F
  366.   }
    , ]; `* G$ }1 `1 x8 c0 t- H
  367. }  
    ( z7 P. {: {( z9 k* I1 N( z. f# `
  368.   
    ' l$ B2 w: F  y9 v3 P! ?! C6 A
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' k" {, X3 j' T  ]' N$ w  n
  370. {
    + ?6 L& ]  J" `9 y; N! p/ H
  371.   int c;, Q$ I9 S4 \+ A- w/ D6 h$ n% @
  372.   LPUPDATEFILE file1,file2;
    2 r' B! c( N* J) C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : V# d3 ^1 ^1 k8 W
  374.   std::list<CString>::iterator l;; U+ ^; Y% U: B
  375. " `- z  y+ g* b7 ?! d4 Z/ a
  376.   UpdateLocal.clear();7 [! J# t7 G9 q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 \- f: u6 A9 O4 M; W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 ]4 B% {. U' {" `  F% B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 ?) b8 W. \2 k0 ^6 L
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - o/ z0 b5 M! H
  381.   if(UpdateFile3.size())
    - ^- b) S: c* C1 C
  382.   {$ Q$ [; U3 I4 F  M2 {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 k7 N( T# }3 d8 v6 \
  384.     {
    9 L9 `# n. E6 j# ^+ R" K
  385.       file2=(LPUPDATEFILE)(*i).second;. {! Q( V" G5 L1 J, [) I
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 G8 v4 P' R1 e! M1 p
  387.       {
    % A* A0 v+ Z( f& t
  388.         file1=(LPUPDATEFILE)(*p).second;
    $ n* r! k1 f! L) o: n
  389.         file1->vers=file2->vers;; l' j5 r9 ~& h6 e
  390.       }/ h; `% L/ |. D* X9 c
  391.       else/ ?/ r8 P. Q5 A1 N  s
  392.       {  g8 z- M0 c+ T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - G2 P: R$ W' X4 c% u; P
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));8 Z% k3 D1 I1 ^; D. H3 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - z3 ]/ \, M5 Y$ P& ]6 L% @
  396.       }
    / c$ M- d; ?8 f/ u, u9 C; P
  397.     }
    2 @0 E. `) y: l! o- o" X
  398.   }& j9 ]9 N# J' B6 W! F4 P; \9 X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . [) D; c% q, r$ \1 c7 z
  400.   {. x; _/ M, l5 @" [" |( U( U. n% a6 n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( f2 |# F$ h- k$ k; @: S. D
  402.     {
    + d, _6 q1 F5 d
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 y, M- o8 q- J) y7 b2 M( G/ J
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' l9 y) P/ w7 h( d8 U  A  w$ f
  405.       {+ o" a# c, L5 v: D% V
  406.         file1=(LPUPDATEFILE)(*p).second;
    - m( w" C( T* O% |) P8 ?  |8 w" w5 k
  407.         if(file1->vers!=file2->vers)
    6 }/ D$ R8 D. b: ]- E
  408.         {6 |& m6 e% F5 r5 w& q/ ]8 j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 v6 r+ {2 o3 R3 V* m1 w; h
  410.           c++;/ H! j. L. I# L. U+ t; A+ X
  411.         }& p) O" r; i0 o% ^8 G, {- L; {
  412.       }9 j) D* m! j1 r/ r
  413.       else) ^, V' `2 {' {3 b, V, X
  414.       {
    % t4 j2 F/ [% B" T) q. u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / g4 w0 M' ^* {4 t; I
  416.         c++;4 y+ \/ `6 x* x  }
  417.       }
    , E) N  W# p  @9 D$ H
  418.     }; u* }2 ^  q* F1 P; M" k
  419.   }  z; A+ ~4 L) @8 H. f
  420.   unlink(".\\DownLoad\\update.txt");' K: A- q- V! j: h' R0 [
  421.   if(UpdateLocal.size()) return TRUE;
    1 I" H# |" v0 I  w. H
  422.   else                   return FALSE;( ~3 c( q! s* D4 n+ F
  423. }: K, Q- ?3 m/ [0 o( }' y( L1 F' M
  424. 3 C3 d" h0 n; U( ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' I1 I! `" @9 f1 k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * \8 F3 l$ P0 ~0 l) c% t

  427. 9 \5 I. o+ |7 u8 M$ D4 o
  428. ; a: v2 A3 L/ g7 h" @

  429. ( P5 b, d$ p: |+ e1 x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)* f9 H, s7 e1 O# M) u
  431. {: S1 r- i) P  K, q. r) g6 x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : ?+ h" h* a! _  g& V! n
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) Y8 A; |+ _7 `) e6 ^! S& s
  434.   {
    1 E% g, t* ~  N* v" ?% n. p
  435.     char szLanguage[50];
    8 T3 k" c$ c# N0 t8 H
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 O; U: }% j$ I2 Y9 e2 b) w3 b
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 I' G0 Q, S9 \% V6 @2 q* R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 f! l1 O9 ]2 M3 J& f1 E. E
  439.     else                                   m_iLanguage=ENGLISH;9 [! D- g5 R, ^$ }& l
  440.     char szRegister[100];/ z0 L$ }+ ]& ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; u! j  }& Y  d: b! L) @
  442.     strRegsName=szRegister;6 Q0 S3 |/ V/ p+ m! n
  443.     char szPatchURL[100];
    ! h1 q* P9 v3 Y; g# D/ _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / E' O9 M7 e8 b2 e. z  y, T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' `7 P3 z* D/ P+ s" Y" L
  446.   }( J! d! }; y( j% x9 q. n
  447.   else# ~0 A9 R3 j4 `! W8 p, o4 {
  448.   {! P8 Q4 x, S: g- t8 f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% k# a9 L# O8 V6 g) b) \, F/ D
  450.     strRegsName=DEFAULT_REG_URL;' K4 m6 |; Z' v( U$ l- }1 ~4 F1 M
  451.   }+ E+ J! s0 ?+ S: Z* {' L6 S5 P
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % F- B" T  u( n: e* a* M! |
  453.   {5 C# x( Y7 y  p, F- ?! X6 i
  454.     char szIP[50];8 l0 B3 c; Q  \$ C% i  H
  455.     char szDIR[300];( k: q+ g. G; R# m/ K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + t4 Q2 `- H3 w! F" c' g
  457.     {
    * x1 u3 V1 V; i, x/ d( i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 P- ]& Z2 _- m; Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; ]+ u% g3 U% @( |
  460.       strHostName=szIP;7 l7 Z1 Y( l6 \# S# F$ L( C
  461.       strHostPath.Format("/%s",szDIR);
    $ X9 A; K/ w! ?0 _
  462.     }5 X" [) q4 x4 m$ w! M
  463.     else( e  O/ C0 |; E1 `! |1 N0 W  `+ m  |
  464.     {  b8 }- r1 T) N! c/ H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # t# k- a" K5 z. t3 W' o, n+ F" w3 D
  466.       {
    , M" K4 Q' e$ l+ l
  467.         char szLanguage[50];, j; h7 Z* J4 {9 O' v1 R4 @6 K& I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; S) ^8 S8 @' b! B% }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' P- l4 u' u& E) `, u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * Q; j  `9 U4 B  ^. q
  471.         else                                   m_iLanguage=ENGLISH;
    1 B) k; S: s3 ?/ }
  472.         char szRegister[100];- r9 L+ C- I' ^. F3 x& I" r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 y/ F7 ~; H2 P2 g3 m. ]# e
  474.         strRegsName=szRegister;
    * V: i- A& u* ?0 S
  475.         char szPatchURL[100];; @) I6 A; v0 z8 }6 @: g: j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 _/ I3 X9 P. i; U5 F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 }5 c' b% U, ^: f  W: Q7 r$ O
  478.       }/ K' g5 P0 O( Y; c$ h1 a' F; j2 d
  479.       else
    7 j! D* l9 O) U9 M  U
  480.       {
    , d7 k# O+ Q& Q) A
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ R0 V/ U7 J& K1 ?9 ]
  482.         strRegsName=DEFAULT_REG_URL;
    ; ?7 k+ L- g9 Q* Z7 P
  483.       }
    # C7 v0 N9 {- Z# A
  484.     }
    / }: p  M; M0 \9 B( U
  485.   }
    2 F, I  E) }6 a
  486.   return true;6 v  @4 ]# |8 u' u/ Z% `# i: h  ~
  487. }
    8 U0 I/ q6 P+ x0 t
  488. 9 v; X- _+ m5 [! p
  489. #include ".\ZLib\unzip.h"$ t/ O  ^+ e9 j6 x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( B9 a' t: r3 }+ {0 B4 e" ^  v" }
  491. /////////////////////////////////////////////////////////////////////////////
    " m* Q. ~8 x9 e) V! g  ^  |  S) ?2 I
  492. // CRevAppApp initialization
    7 E, {4 z7 ]4 x! _6 r

  493. # p$ N( Z6 ?! B6 t, L$ v) ~; Y
  494. BOOL CRevAppApp::InitInstance()
    , P  _  }* P% {2 S. m  n
  495. {. m+ d3 X2 S8 m  H8 b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " g6 O7 H7 a; M
  497. $ t/ |" b; Y1 J9 w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 ~( T- Y5 C7 A* y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 S% Q. _+ u/ S- f
  500.   {* |/ i( A; f0 Y: z" M0 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ! u  ?& w& I) |7 \7 @7 ?, b, C+ f
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: t0 f9 I. S" b' J. i2 `: \. d; s
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 d' h: {, x. [  l+ |
  504.     {- X3 P/ \. O& g" A8 F
  505.       strcpy(szPath,szPathTarget);
    ' ^; c4 ~: d5 G4 i, Q- o
  506.       SetCurrentDirectory(szPath);. o& L" W7 Z& b/ r( t4 C+ m, ^
  507.     }/ D9 @. X. P$ k, `# ]5 B9 i) Y
  508.   }2 M1 Y3 [4 z4 D5 H. g0 J. n8 k
  509. #ifdef _DEBUG$ V( s% G, H9 v) s: d3 w' H1 r, f/ R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 g+ o, I' Q) `: W4 U: V
  511. #else
    : @  |3 z- W/ l# J! g% \# i* g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( h  K0 m6 }) X6 L3 Z2 b
  513. #endif# E  L) R  u! B3 {5 t8 y
  514.   {
    / ^$ q- ^1 a+ c4 x9 _+ E
  515.     char tempFileName[MAX_PATH];
    : J; g. W1 n- f) Q6 b
  516.     strcpy(tempFileName,szPathSource);
    0 p1 n# F* }, x& S% b: b4 _% D
  517.     tempFileName[strlen(szPathSource)-12]=0;6 P8 @6 b9 f& k. N; _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, U1 @3 G. H" R2 s  Y3 q5 x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % s( U6 Y* k% \% k
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( B' \) \# w' v9 k, v3 o
  521.     return TRUE;
    4 I1 ]; n6 Y/ C  c7 t6 t
  522.   }4 }. i. v2 \7 Q' u, _) }' z
  523.   // Nuke 0118: Delete run.exe
    ; N$ e( J- O4 c) T: a5 @. c, Z: R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    2 o. Y1 m" f) s$ i: n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    9 ]$ e* C/ \/ n% M: r
  526.   if(!ReadCfgFile("Config.ini"))
    2 B2 p  k8 J( x: ^0 r6 w
  527.   {
    2 u( w! k) ^' L+ r( U+ E
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 Z7 C4 i! |* G4 [. P! E
  529.     return TRUE;5 X& Y5 k1 z, @4 `/ L& f
  530.   }2 n' y7 u# E/ v; x) g3 i6 e
  531.   HANDLE mutex;
    3 b' ?% N* @" H5 q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))+ u/ I! u" }0 W8 O+ X5 v
  533.   {, s3 E% _' Q. p) u& V" N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 h; N9 a& c  D. F
  535.     {2 a* c4 M4 c7 t( R& w1 A
  536.       CloseHandle(mutex);. q- Y* q! H8 ^. o* w
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / e% H+ W/ W$ H; C9 P: T( X7 l/ o
  538.       return TRUE;
    2 o9 z$ h$ m) j4 r2 v
  539.     }) q) w2 E9 f( }7 f& P- C! y
  540.   }  3 k# \8 m. Q, q+ s
  541.   CloseHandle(mutex);
    7 Q, ^8 X" \; r8 J2 L* q4 O1 l
  542. " X! Y1 d5 \: Z% h- M# X9 j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 ]( ~. ?1 @& L; C4 d
  544. " J; M5 ?4 v( t8 j( y' B& [7 ~
  545.         AfxEnableControlContainer();) f) k& J( t0 s* v

  546. 9 V" |$ M; F6 k" o% f' T- D8 j" e
  547.   bCanUpdate=FALSE;
    7 J9 {1 E4 \# W3 r) s
  548.   dwStartUpSteps=1;" l3 K, R/ I9 |( ]; J  v
  549.   dwProgramState=AP_NOTHING;, s$ ?) ^2 i# [! T! \+ [
  550. ! G6 \0 t* X% ?' B" I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) q$ H/ s  X2 Z9 F% z! l

  552. 8 m" b. K6 b$ }
  553.         // Standard initialization
    4 i0 c( g& j$ }. x3 w8 O! p
  554.         // If you are not using these features and wish to reduce the size
    ! a( Q- O! `/ D, J
  555.         //  of your final executable, you should remove from the following
    , U3 T& x2 X9 ?5 E
  556.         //  the specific initialization routines you do not need.
    , a- _& |! l' C

  557. 4 ?6 _4 p9 A, Q$ T6 I  w
  558. #ifdef _AFXDLL( {7 a+ ^, r1 O+ L+ a7 X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * z5 Q2 S8 k2 S0 |( Z1 U
  560. #else+ I, |% D8 h0 I6 y" c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ q3 `* [/ f4 d& Q1 i0 {. a5 a
  562. #endif
    % X4 j( B( {( O6 L

  563. 3 j  h2 W1 [$ l0 w5 J- p' Y
  564.   dlg=new CRevAppDlg;
      a6 X. m" _. {. X: T2 W  T& o
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / m' |7 |+ H2 ^/ l
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, C, q7 X3 ~) I3 v6 G6 k+ t
  567.   m_pMainWnd=dlg;
    ) n) k7 R$ Z$ q/ J
  568. + l( t" |4 x, Y# ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) F& W1 }% m5 i2 b

  570. 7 T$ |3 _+ N) Z: {2 L7 E
  571. //  GdiplusStartupInput gdiplusStartupInput;
    : S* M4 K$ v5 `+ g' [7 m
  572. //  ULONG_PTR gdiplusToken;
    ( k+ [# c4 e6 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! ]6 `, G; s& {/ M

  574. 9 @3 @0 m- Y: F
  575. //        CRevAppDlg dlg;0 l  t4 I2 ^& _* f1 C
  576. //        int nResponse = dlg.DoModal();
    : v; U7 P0 ], H8 k8 Z: [
  577. //        if (nResponse == IDOK)
    2 z# S% H: \9 \1 T2 Z
  578. //        {' b/ g5 R9 A/ B- F- X1 V# r
  579. //                // TODO: Place code here to handle when the dialog is
    - }3 `( Y; W" G$ Y9 M
  580. //                //  dismissed with OK! a1 m; u2 g/ h6 X
  581. //        }( h' B# Q# _% C! b
  582. //        else if (nResponse == IDCANCEL)
    4 p9 a, U  L% P) |0 z7 x4 ?8 S
  583. //        {6 p! g+ L* S: ~) P  C. z# i' t/ }$ M
  584. //                // TODO: Place code here to handle when the dialog is
    1 r. c- R0 f$ P/ k$ P
  585. //                //  dismissed with Cancel
    " J$ E, z: D' s7 i) C: R! @
  586. //        }
    $ D  z! _) |0 @1 b2 a6 |
  587. ' v  l+ [. M' ^7 s+ ?, Q4 @( l
  588.         // Since the dialog has been closed, return FALSE so that we exit the. _" C1 @( J# Q" Z
  589.         //  application, rather than start the application's message pump.* C. D3 f1 V0 d
  590.         return TRUE;' R3 \8 K# i* x) G
  591. }
    4 P' X* Q4 I9 E
  592.   p9 G! L1 [% g+ _+ W0 B  e# X
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    . r8 F, r' |- r9 q# U
  594. {" E# r, f8 t6 l+ G
  595.   int i;
    : N. o; G/ k3 Y3 J7 L
  596.   char *szRet;
    0 x, I  P2 ^2 y" W( j4 O; }

  597. 9 ~- c) S# F  G; j7 N2 J$ G# L
  598.   if(pSource) { itoken=0; sztoken=pSource; }( ?; J( y0 i! t8 y
  599.   if(sztoken)
    4 B7 @/ k& ^5 K
  600.   {
    # H! s/ |" Z" I
  601.     szRet=&sztoken[itoken];& r. ?$ x  ?+ j/ D# D) {$ `# F
  602.     while(sztoken[itoken])
    ; X3 y' i5 Y0 n. t8 [6 t& ]
  603.     {
    + p" ~1 ~; L& \9 Z; R  x8 \
  604.       for(i=0;i<(int)strlen(token);i++)9 W# h5 |$ }) `
  605.       {
    ( D8 j% c# Z: E: @+ d6 P& @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 Y1 U' B) x* I8 y4 w3 x3 p
  607.         {0 l& Q  }2 q+ o4 c: @0 Q
  608.           sztoken[itoken++]=0;# X* b5 O. T4 Y5 E& N' u: O5 D5 j
  609.           sztoken[itoken++]=0;2 q5 n2 Q# b5 [5 O1 S3 u$ E
  610.           return szRet;
    + g; ?  W( G( @# o3 x# B8 T% B
  611.         }
    2 w/ a5 N$ N4 R1 C% }
  612.       }
    1 O' p4 U* A4 M) R+ V
  613.       itoken++;
    4 p3 A" N/ t8 t$ M# A
  614.     }# n8 Q% M7 a4 H  b0 y
  615.   }
    " q# v6 y5 d# M' w# [
  616.   return NULL;! _$ z3 l( |, P  Q: [6 \/ a
  617. }
    0 ]# b7 p( q# l& ?
  618. + S, L/ }6 \- s! c
  619. void ProcessProc(long Total,long Current)4 W8 X0 t: [% c) t- f7 Z- W
  620. {
    ' B2 r/ M  h! W5 K0 L
  621.         MSG msg;
    1 a1 z' _1 M. f3 @/ G
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' D0 G( L3 O8 q0 V! G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: [! Y' u' \/ S) ]; L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 l4 F4 d, a/ P( ]) }
  625.         {
    + E7 X8 L7 B8 j( N- {* \  J9 |$ }
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' W3 I; U) {6 J
  627.                 {
    9 R# T& D9 j( v8 B2 `1 \/ n# [, p
  628.                         return;
    / x+ _  _3 {9 ?7 ~; I, @! a4 U
  629.                 }, O/ U6 S7 j: x6 d9 O0 y! d& }
  630.                 TranslateMessage(&msg);9 N2 D( B5 Z. K
  631.                 DispatchMessage(&msg);
    # ]: K7 T9 w0 [
  632.         }       
    ' P% k: T1 X, w' n$ _
  633. }& \4 T" W* z7 i* j
  634. 7 _9 A- u) b, O1 X$ W
  635. BOOL bFirstChar=TRUE;; w3 n1 D; Q! O& O' i
  636. 4 K" s1 S+ e( J2 L+ g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)) I, R0 \; H  d2 a& t8 |4 H
  638. {( x/ h6 H: T% S" u+ X
  639.         // TODO: Add your specialized code here and/or call the base class
    . d- F8 i- j1 A$ `" H# ~( l
  640.   switch(dwProgramState)
    : \3 X1 e0 m( Q- ~4 N% R$ B
  641.   {
    / ]0 g: G  G6 @
  642.   case AP_NOTHING:
    % N) @' D; h3 f% z6 F: @
  643.     switch(dwStartUpSteps)# f: w. b0 N2 v! J
  644.     {* n% x4 E4 c0 q0 H) [# E2 q6 x
  645.     case 1:
    1 m) s# c- s  i# Y4 d4 P6 l
  646.       {
    , [; t" S7 G8 }& B* M
  647.         int i;4 s! W( i2 M, h. Y, v. H
  648.         CDC *pCDC=dlg->GetDC();
    - J# q' ^$ v6 s, Z
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 V' O/ `* q  e& \) x8 u2 @& Y
  650. //        Graphics graphics(hdcwnd);- F1 L! c7 d. c- J7 `9 j
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" M3 M& E7 R, |! I" {9 l' s1 Y* B
  652. //        INT iWidth=bitmap.GetWidth();
    . w, t3 s1 ^6 h
  653. //        INT iHeight=bitmap.GetHeight();
    9 v/ X0 _1 M; k" |8 Y
  654. //        Color color,colorTemp;$ g' K' g+ @) y! M0 H1 I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' g5 Y4 w# X- W4 w4 d- L$ W8 ]2 q
  656. //        {
    " K/ x- D9 J( y' w$ D1 w' u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! H. P5 l( B, {) }) s! z3 O& ~' X
  658. //          {9 y5 I3 ]. e0 p+ Y9 V7 S  [- K' a
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    3 L, Q9 x% ~" ]" I9 p
  660. //            colorTemp.SetValue(color.MakeARGB(/ u. t8 _+ r$ H  A" T% b
  661. //              (BYTE)(255*iColumn/iWidth),
    8 A; |$ r% P2 ~; v/ R
  662. //              color.GetRed(),9 V  q4 |9 Z1 s1 C$ a$ V! U6 E3 k
  663. //              color.GetGreen(),
    & r1 @0 S  v* S3 s$ V+ s- V
  664. //              color.GetBlue()));
    ' M3 l. s" @) h! L1 [
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + q: r5 d' `- |
  666. //          }
    : y1 L4 T" T# J
  667. //        }8 }, b4 n% ^" K# s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 u3 u/ z8 a* p" ~9 n& h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 b& `' n% r0 P( {$ P) d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ l* `$ s2 h. @, v3 Y/ ?% o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* J. f$ \" T0 N1 B" s; Y5 D7 f2 _) |
  672.         for(i=0;i<240;i+=8)- Y( i) A) [# d0 k+ U1 ~7 O
  673.         {
    8 |- ^. _( G( E9 _, m: M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 j) b% X# r0 c, M0 O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 x! G5 M! e! {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 b% V: J7 H/ V( N. f. f
  677.           Sleep(33);" p. H' C# [  i1 A, I
  678.         }  v" r; D6 @# ]& {
  679.         Sleep(1000);
    2 l* }3 [0 N( c2 j: r  x
  680.         for(i=240;i>0;i-=8)
      `7 T8 x* f1 V; F: ~5 Q: ]% n3 t
  681.         {+ }1 k8 x, k7 l, R/ s' f. ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. T" l/ L- A2 G3 S1 A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  f* W0 Q/ r# I7 H- D* ?% j2 }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 z- E4 ~; C4 b( W
  685.           Sleep(33);
    4 b) ~. {$ f# _7 P
  686.         }
    # u% X  ?; s7 j
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ `6 o: R* P) V. X# \& [
  688.         dlg->ReleaseDC(pCDC);8 m2 u" R7 R9 V; R3 i; _
  689.         DeleteDC(hdctar);
    , g9 l* C/ M% Z1 \  h7 g, s
  690.         DeleteDC(hdcsrc);/ g6 Z, {* Z! e5 n
  691.         DeleteDC(hdcorg);
    4 s* Z# S3 B/ i0 l* ?* b- e
  692.       }) ~- e7 S9 @9 D  v% g8 b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) y" Z1 t2 p/ [2 Q% L+ a7 F9 t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' F$ ~$ F" k$ ]0 ~& C: }* q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , Z/ z9 v3 K9 d% W0 S) A' c
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");9 r) [- m9 ?8 S9 v, v  ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  R  |) n, I' X, E6 h0 N- u: n
  698.       if(!Dn.Connected())
    1 y" O' f7 F$ O  ~2 g. u* J
  699.       {
    * @4 Y/ n# |8 ?, {# T
  700.         dwTotalFiles=1;6 N, B( C. Y) L- z
  701.         dwDownLoaded=0;( r: S! o1 ~6 A; T: D7 T; }$ o
  702.         bSilentStep=TRUE;
      r8 O! ]5 C6 q# d2 U' L
  703.         bCompressed=FALSE;! y/ v9 V4 ?) n4 `2 h3 s. a
  704.         strExtLocal.Empty();, H- R* d" i% }9 ^+ X4 _: c
  705.         strFullName="readme.txt";/ A' G! T3 c# R4 \3 J
  706.         dwProgramState=AP_CONNECT;
      }, c, v& t, c
  707.       }7 b& }8 K) E9 s) J+ U, Q  N+ i4 H6 ~
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . R- M- g' \6 ^
  709.       dwStartUpSteps=2;
    5 x; R2 q. q( G* O5 D# V& }: V
  710.       break;' b2 _0 Y$ b; Q/ U
  711.     case 2:
    % R( a; y) ^# P' g: X
  712.       {# T, A7 B! E- v
  713.         int iEOF;
    & u! u: f  H+ b9 W  m0 J
  714.         FILE *fp;
    * R: V2 O% n0 q
  715.         char szString[512];
    $ X6 ?6 O9 N- h# \! X+ D: }* R; a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' ?& @8 }6 B( \, S
  717.         if(fp): N0 h( e* L! ]
  718.         {
    3 k+ r  N' U# c  L
  719.           do
    , \/ Z6 [* u" h
  720.           {" Z: i) c6 J7 S1 o
  721.             iEOF=fscanf(fp,"%s",szString);+ d  R7 I) @: A% U6 A
  722.             if(strlen(szString))/ S: g; l2 i: N) Q* x
  723.             {
    9 ?6 Z9 d/ @% @, c
  724.               if(bFirstChar)
    1 z5 \. E5 m3 |* ]) Z
  725.               {4 V5 Z; G) @' ~; R7 h0 R0 f
  726.                 bFirstChar=FALSE;' @' e# ~# s( n- g. A  p
  727.                 bConnectIsBig5=FALSE;
    6 @5 B6 Z) L0 {9 [# O
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; l% @2 A# z4 J3 m/ {
  729.               }1 F; B& ]! M0 t! i
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & Z: u7 F' H6 o1 T  j1 M
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* t6 g0 }3 Z6 B
  732.               dlg->m_ListText.AddString(szString);+ [/ ~2 i4 n5 L2 M" ^4 W/ h1 I: ]; G* X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % k+ [- C! @; r$ x+ S& o# ^6 D
  734.               *szString=0;
    + R9 ]2 u; ?2 Y. X; J0 d
  735.             }6 M7 }0 A+ Q( f( k( N- H
  736.           } while(iEOF!=EOF);
    2 w4 U" h+ ?( t3 a
  737.           fclose(fp);
    6 b& @% j. z3 ^( w3 i2 M, k
  738.           unlink(".\\DownLoad\\readme.txt");/ m. G8 x  O% t
  739.           dwStartUpSteps=3;5 c3 @1 j, \1 w* L
  740.         }' y0 E+ }5 i5 R
  741.       }
    , `% h) P' u) a. h3 M
  742.       break;
    3 b2 g5 L  N# Y) i- F
  743.     case 3:5 e& r7 d# U2 @1 ~, P
  744.       if(!Dn.Connected())% C' j. a4 y: h
  745.       {& X* c5 q8 @' y3 Y8 j, e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - t; T2 a- s! E/ `, k/ i+ b
  747.         dwTotalFiles=1;- q# }  @) g, N3 i2 _+ x
  748.         dwDownLoaded=0;2 L" p) b; Y% j& m. {
  749.         bSilentStep=TRUE;
    7 H, f5 ^7 C! ]/ Y( U
  750.         bCompressed=FALSE;. U4 f7 ~& |, E2 V' D
  751.         strExtLocal.Empty();
    $ Q8 B$ `1 N8 K* Z, p* x3 m& T
  752.         strFullName="checkversion.txt";) s4 |; E2 u9 v
  753.         dwProgramState=AP_CONNECT;
    5 Q' a. G% B6 i& E
  754.       }1 s. K% H; \2 w/ s# r
  755.       dwStartUpSteps=4;0 `! P; F* {2 f6 H5 @2 O) Y, o
  756.       break;
    / ]$ X# x3 u: X/ j+ n7 H  t
  757.     case 4:
    & Q& `0 a9 v1 C& u2 H
  758.       {# ]; W9 r, U6 I  P1 K% C
  759.         FILE *fp;
    . s0 K2 j- \7 |, y" j
  760.         char szString1[128];
    4 Q& P  J$ u. S
  761.         char szString2[128];4 V  S: f5 ?* \5 v6 Z( d3 Z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" w9 k8 V( y) i
  763.         if(fp): c9 |/ {  A5 u
  764.         {6 G: F9 P  X) k# o! {: X. U
  765.           fscanf(fp,"%s",szString1);
    - {# j2 t2 B% l( q6 c% V
  766.           fclose(fp);
    2 _! W, a: b8 M% O( F% N, x
  767.           fCheckVersion=atof(szString1);
    6 i( h% ^6 N# v( \! {4 g
  768.           fp=fopen(".\\checkversion.dat","r");
    / T) P" `2 Y" @5 E. n- X0 D
  769.           if(fp)
    . L( I  a. m& N+ _4 B9 `9 e
  770.           {/ E  R3 O8 u% B* x6 v5 }  M0 l
  771.             fscanf(fp,"%s",szString2);6 v. b  E/ t1 @# C
  772.             fclose(fp);# C2 f- s( z) E; X1 ?
  773.             if(atof(szString1)!=atof(szString2))) l( X9 v% T$ z  _
  774.             {4 s# l, O2 ^0 [7 @' P
  775.               if(!Dn.Connected())  u7 B0 T+ V" o9 ~5 O3 g- x
  776.               {
    , h: U8 f( p5 z
  777.                 bFirstUpdate=TRUE;( c2 y7 f5 R' k1 ^" D0 U) U
  778.                 dwTotalFiles=1;  _6 _# S5 J( J9 [- m# [
  779.                 dwDownLoaded=0;. `8 C" D2 a( L; @' Z) J1 b& ^
  780.                 bSilentStep=FALSE;; ?5 V: V' y/ `9 y2 G
  781.                 bCompressed=TRUE;: ~% Y6 Z* G9 }9 h
  782.                 strExtLocal=".\\DownLoad\";4 x% @0 e+ H- \
  783.                 strFullName="update.txt";" I% ?. g( f" Y) n
  784.                 dwProgramState=AP_CONNECT;
    8 J3 Q) ]2 y. U! f* c! C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 b' i/ \& b9 {! A
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & g* ^: r+ a+ e, O$ v" e/ k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - z8 \: j7 T0 ?. e/ y$ O' _. H
  788. & g4 n. w% b7 ?7 b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& Z! D- E% e3 Z; K! g/ C0 l! @# G
  790.                 unlink(".\\DownLoad\\checkversion.txt");
      G1 C9 a4 N9 o2 L: M% Y" `+ B+ r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 b, G+ \  k. s
  792.                 {( R6 K+ b+ y/ ~; ?0 N" B8 L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 M5 H; g  m7 t" L7 h/ a5 F1 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    1 @8 b7 f% a+ L2 v9 ^) ^
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 b' `2 ^# P6 k  K/ ?
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 L4 m* l4 x; K. Q0 [& O
  797. ( G+ I; }$ i& {1 u0 k8 {* _, z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 D/ j% ^; y2 I# H/ p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 g7 F( ?8 _! D0 p* O& P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 {' M- c: n! {! {3 ~
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 c2 b+ N! y7 ?% y3 ?  U. [" K, h
  802.                 }+ G3 x# z" o7 M6 D# o- C2 t& G2 h  ~
  803.                 dwStartUpSteps=5;
    % g, m# P1 T7 p  X7 Y
  804.               }3 `5 w; c0 Y8 o7 J& M% A
  805.             }7 z5 T8 I+ W9 X. y  @
  806.             else
    , N: W% R8 C- T: _' Z- l2 J- W
  807.             {% @' E$ n. }! V$ Z0 T' t) ]
  808.               unlink(".\\DownLoad\\checkversion.txt");# [# \3 w* c! d9 m$ u( n
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + X5 n3 B  {/ H$ c/ @5 y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 n; k* Z/ M  X  M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% H1 _2 T; W) w& J- s
  812. % `# [0 u/ }4 |" e+ e: P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! n& i5 e$ j1 B5 w0 N/ {' C
  814.               dwStartUpSteps=99;
    : t# {5 }' f( Y2 a( b$ d: Q
  815.               bFinishUpdated=TRUE;% u3 c# ]1 _, }/ Q  Q7 J
  816.               bCanUpdate=TRUE;
    / |9 E3 ]9 P5 E( N5 F1 u
  817.             }
    ; e+ w3 ?3 h) x# |
  818.           }
    % v# z! o* _2 C( H9 ?8 x% h( T
  819.           else8 ^+ ~. u7 E& }4 E6 y) V' r6 p
  820.           {8 F" Z: n6 ]3 K* v" c7 ]  w
  821.             if(!Dn.Connected())
    * j* z' J& k! ]4 ?) U
  822.             {) k" B. u! u2 o9 ]
  823.               bFirstUpdate=TRUE;
    & w' P4 |6 c2 Y4 H% J- b; i
  824.               dwTotalFiles=1;8 Y( A5 z& I# v9 P- P
  825.               dwDownLoaded=0;1 `1 ?1 b8 M$ A9 ?1 b& j
  826.               bSilentStep=FALSE;
    : r. t( O* M% p4 I3 I% }
  827.               bCompressed=TRUE;
    - f; Z+ h/ M( h0 L: L% t2 n
  828.               strExtLocal=".\\DownLoad\";
    . \+ G2 P& m. }( N2 \
  829.               strFullName="update.txt";
    . Y* R5 p( X# C- R! T( \" G
  830.               dwProgramState=AP_CONNECT;
    & A" S7 |& f: o6 m4 t/ @' S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 b$ ~( r- s" Y+ X) \; _8 B7 r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& Z7 S& P- g5 E
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- y( n# R; M; y6 }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 {3 K( c9 p; R7 k8 C1 u
  835.               unlink(".\\DownLoad\\checkversion.txt");; q/ e5 V' w* c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    1 Y. t; N) p  t( B8 E6 m( L6 d/ W
  837.               {
    . }1 X- z$ I; A+ Z2 E: [) Y3 r  @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  A) f; _. s7 s8 E- E! V7 E+ u* A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ c. k* g! G5 @! B6 N/ n: @9 x, O9 x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; C8 c1 d1 N7 d
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 @8 U( X1 f. n- B' }9 [* o
  842.                
    ! e% ?8 i. A* \6 Q& G
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, _. h! z6 l6 {/ v' l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * X& i# v0 V. l0 s/ W9 C6 |, B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 j0 q& s7 \" d9 x: o( `! P
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' i5 q' A- y! S' R
  847.               }
    1 o0 {$ a( g" y5 b  {" f: w
  848.               dwStartUpSteps=5;6 L$ b5 o% r; ?& g& w
  849.             }
    , B4 O0 k3 `0 v) ^
  850.           }) ?4 E+ U: k6 P6 n5 j
  851.         }' r/ e+ w6 N7 V8 n5 T
  852.         else) I. P5 P  q) ?
  853.         {
    4 T! |8 @+ O% O0 _4 e7 _" j
  854.           dwStartUpSteps=3;9 q1 o: o' {+ E8 l$ C' S1 W/ K
  855.         }
    " a/ G2 G; j1 M/ i( U
  856.       }
    ; w+ ]% k) ~% W1 }+ {
  857.       break;
    ; Z0 d2 q" f6 ]- i3 @
  858.     case 5:
    # I1 t' b& x# @
  859.       {, B! ?0 |( s5 s5 L) @
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( x% x  b% V' S' p
  861.         {! u; t" ^# W, x( Z% `
  862.           int opt_overwrite=1;! m1 S! F+ |  q7 C; U
  863.           int opt_do_extract_withoutpath=0;% l) E$ {* Z6 H" |. S2 \  b! w
  864.           unzFile uf=NULL;
    : H; e( L: \: c" i' ~

  865. * c$ J5 H4 p1 S& d# o1 D
  866.           uf=unzOpen("Wsa.zip");5 Q1 n8 e3 M3 i7 u' x
  867.           if(uf)
    7 R8 @0 H, _6 W$ `/ B
  868.           {$ j0 t/ N, I' C2 ]5 K/ _
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " l4 T6 R( z2 Q- V: E) m! z7 t
  870.             unzClose(uf);2 `) d/ A9 p: @1 B: j1 k  ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . B1 h: ?9 ~& z: _; d1 \2 w  N
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    " b8 v4 z5 K# ^% S) t" t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 n. j6 x. r9 j  p, ~* j$ \$ _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 b8 e; ^  r7 f" }3 S5 }+ f; b" s$ I
  875.           }! n! O. O# ?9 w6 \* w* k
  876.           DeleteFile("Wsa.zip" );2 R1 P$ z7 P6 u; g9 s: ^
  877.         }
    0 f- J$ C0 R8 d. \4 w- t; E
  878. 9 K0 R) o" l8 o+ s9 J. p
  879.         if(CheckLocalVersion())
    0 p& ~5 @3 }% h( n3 m
  880.         {
    # f. r( O+ C9 \( l- H
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");; K$ H) E& D) F! O! a* m" B/ i
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 q) w2 U3 A* z$ M$ v% f
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");4 S7 w! J* i$ I6 Y- V
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ E) N5 n0 r5 j  ]4 o- ~
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);! T2 z% H4 C) W7 s/ H7 d
  886.           dwStartUpSteps=99;) f9 F, @; l% |8 E
  887.         }
    % E0 U+ u+ a% W: H1 d7 u+ O
  888.         else
    0 N% u! D2 w. v" ^4 ]1 Z! S6 x# Z
  889.         {
    0 ?9 p! \& l2 u, @
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  e: M( y( l% w
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 j% [' ?& K# Y" z+ [$ G
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( S* }. c7 e  j1 L7 Z: ]

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

, I3 m1 i  I" _/ t* T

評分

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