CSUpdate.exe源代码

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

- L! b+ K& {% m  J8 d
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * c) H" b% |: I9 T* {2 T- k
  2. //
    0 a: d% f) x# z; P2 K& ^& M, L# ~
  3. / k- h) F0 X, P3 f
  4. #include "stdafx.h") J" i7 }0 x, W7 u) d8 P" W
  5. ' z9 ?: y/ m: }  y  {  j
  6. //#define UNICODE
    # d1 Y* Y; a8 n9 }# c+ O' ^' s; l
  7. //#include <gdiplus.h>
    : S; ?% f8 x: Z- e1 p9 k' g" }" \
  8. //using namespace Gdiplus;
    & R/ @9 a/ E& F& _0 x

  9. ; ^9 M+ m7 ]& `7 m+ ?% \7 \
  10. #include "RevApp.h"" Z/ x; p/ x  q/ G+ W  f/ x
  11. #include "RevAppDlg.h"
    " W- P9 M' I( F7 Q9 v

  12. 7 K8 X# V! f; \8 a0 S1 ~
  13. #pragma warning(disable:4786)) j) r& }( v% ?! N
  14. #include <map>
    : G3 `6 Q) N( g. I$ {
  15. #include <list>/ c+ e3 l" Y. H0 U7 r; {4 E$ k( J
  16. #include <direct.h>
      V' g$ k$ H1 k, m
  17. ( O( ~0 z: h: R: z: z5 V& v( `
  18. #ifdef _DEBUG' s4 E2 O+ S; a8 j
  19. #define new DEBUG_NEW0 e7 }: m( n( w# k" a
  20. #undef THIS_FILE
    # ~4 N0 ^; G" M# \4 J& H# z. f9 T
  21. static char THIS_FILE[] = __FILE__;
    $ }0 \: ~3 E' U: m! C, [: ~
  22. #endif) |# l' m" W( S
  23. #include "SkinResDef.h"
    1 x) G' T8 p6 L* U* K9 j
  24. #include "ChangeBG.h"
    $ f3 U5 o( X, j0 g
  25. #include "AFXINET.H"5 t& e" ^* u2 B& A
  26. 1 f0 n1 M$ c8 T' g! N- U8 R; N' B
  27. #define TRADITIONAL_CHINESE 0. _: @4 I2 p% |
  28. #define SIMPLIFY_CHINESE 1
    6 A$ \0 @2 e) Q3 v9 K7 B
  29. #define ENGLISH 2% P$ w# B( M  Z2 r. F2 c
  30. int m_iLanguage = ENGLISH;6 Z0 M7 O/ B) E0 o1 D
  31. /////////////////////////////////////////////////////////////////////////////# D9 y0 f) W4 |/ ^( W
  32. // CRevAppApp! N6 h/ _& f  s: V/ A9 `

  33. # F% S+ J4 u! f( @% K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ w. ?3 J- Z7 g" X+ N. y9 Z
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 J! [0 |/ N' l6 {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    8 ^9 j8 t. C" U5 L4 d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! N# G+ j9 R' x/ ?5 N+ ^# [
  38.         //}}AFX_MSG
    - F# j$ `$ o0 d( T. \% l! F/ P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / ^3 g7 [1 @* N6 F% V5 j
  40. END_MESSAGE_MAP()4 X6 [% F5 e# v2 ^, t3 R, u
  41. - l4 U, M6 O) a
  42. /////////////////////////////////////////////////////////////////////////////( |9 z. h1 R( X' K( c5 [# x
  43. // CRevAppApp construction7 ^# m3 k. b6 S* J* Y% a. G

  44. : t( U. ]! y) }" b5 K
  45. CRevAppApp::CRevAppApp()
      }1 Z9 Z, \2 L+ `: X" g
  46. {
    7 ]1 W- L) f6 c$ C4 D5 U* q6 I
  47.         // TODO: add construction code here,- Z- J( V: W0 B$ U5 Z
  48.         // Place all significant initialization in InitInstance
    * O0 M; ~+ c* T: j  Z( D  t5 z
  49.   bDisplayIsBig5=FALSE;
    * F6 b' F9 K8 s* ~
  50.   bRestartUpdater=FALSE;
    - w1 Q; S$ d) s! |  b. K+ E2 R
  51.   bFinishUpdated=FALSE;' O8 A  S8 ~' |. Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 A/ {6 x* Z8 M8 T1 k
  53.   InitChangeDataBig52GBKS();
    9 a/ d5 v+ {) L1 c4 f
  54.   InitChangeDataGBKS2Big5();
    : e: [/ ?9 e5 Z6 J$ G
  55.         //
    # _  h& {0 m- q; u. T+ o
  56.         bClickRunExe = FALSE;8 _' K# @0 o% [: n3 `
  57.         //
    2 P7 K8 Y7 y) P
  58. }8 M4 A, s# j, i5 j' Z( A( G
  59. 3 e( A7 S+ Z2 P, l( W/ b
  60. CRevAppApp::~CRevAppApp()
    - e- ?+ G( N- I
  61. {( w% p2 Q- N. ]/ n8 }5 ]
  62.         // TODO: add construction code here,7 g  ~0 I9 H2 b8 q! k/ P( g
  63.         // Place all significant initialization in InitInstance# m# r' F1 K3 E2 |  e4 `
  64.   EndChangeData();7 X! v. f7 \) B7 C
  65. }. s& B/ P: v) I1 h6 c

  66. & \$ D3 I, h. K
  67. /////////////////////////////////////////////////////////////////////////////
    7 {# }7 D" j2 \7 y- K
  68. // The one and only CRevAppApp object# V4 G  k# K$ C8 P* y/ W

  69. : }7 [& M. C; Y. |
  70. CRevAppApp theApp;
    6 H8 @) k" e0 P, c, F( r( x

  71. 9 C( A. c* h) h3 L0 E  H  U
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); P; J2 U4 R+ _' z/ `
  73. {" s6 T1 v. t' Y- p
  74.   int iEOF=0;
    . p2 U8 j. P" s+ o( H
  75.   char szTempName[MAX_PATH];
    8 T, n: @! R, h! N
  76.   *szFileName=0;
    - `/ u) _) G+ B8 w+ \4 |, w0 Z0 S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & s; Y7 s  P( h6 H& ~& k$ U+ a, d  o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')$ r" O8 O5 I6 q
  79.   {
    ' X+ r: k" A! S2 C3 }" F, G
  80.     strcpy(szFileName,&szTempName[1]);
    9 A- p2 A# t: `# O; u( m1 n- [4 h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 ]" }* B( X: Q
  82.     {% d0 t# e% j- q3 K/ G' `0 H$ I; P- O: _
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , B( n2 b" r" D) w5 a/ `
  84.       strcat(szFileName," ");
    ; g9 I' P. U* ^. Z! {3 N
  85.       strcat(szFileName,szTempName);
    ( m6 l" o- ?% {3 x
  86.     }- }" G/ G6 @: d2 D3 L- t* @
  87.     if(strlen(szFileName)>=1)
    , U* H  v' B: G
  88.     {- _+ n5 F. {0 R/ h9 v) I# X
  89.       szFileName[strlen(szFileName)-1]=0;
    " ]/ P+ f* X5 @! @; j, m
  90.     }; D6 a( c( K7 d- E5 ?
  91.   }
    % \+ ~1 o% u( }. ^; ?5 R7 L5 [
  92.   return szFileName;
    & S+ O/ w* \: f6 F8 ]- y
  93. }
    5 H. r  j0 j+ L5 S. a# @  s1 _5 P
  94. 2 V; g  ~  g+ Z/ Z7 l; A: f! Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). Q9 Q$ T9 o, P. g
  96. {
    ! H) ]' `3 B3 A
  97.   FILE *fp;5 u, N7 f2 P% j- x
  98.   char *key=NULL;2 |- t2 A# h; f
  99.   char version[MAX_PATH];
    3 _0 J* r: u& ~# N" r
  100.   LPUPDATEFILE file,olds;
    9 r, \4 m+ A6 D! l. [
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / ~: w. q. v' n) Y' y1 e7 A
  102. . {& U) L6 C/ c- _, l' H
  103.   UpdateList.clear();, R& [" |7 `$ \0 n9 x
  104.   UpdateFile.clear();3 L) S6 X3 p) w6 g. e' Y
  105.   if(GetFileAttributes(filename)==-1) return false;( W) I- L, R$ [- ]; I5 l+ v/ }
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ' g1 F6 c. ~* ~0 P3 U$ d
  107.   fscanf(fp,"%s",version);- E" z' N3 S+ ?4 S
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) R6 u9 W  ~, Z
  109.   while(fscanf(fp,"%s",version)!=EOF)7 i, P  s) S3 Q& \, R
  110.   {# h) V9 m  U' o
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 F$ \, V( |6 y
  112.     fscanf(fp,"%s",file->path);
    , q- y) g8 g4 T6 t
  113.     ReadFileNames(fp,file->file);
    ; c' ^; }- c) P$ G2 d- V) f2 U" D  @
  114.     strcpy(file->full,".");6 c% Y; l, ~0 e' j* Z: D4 i: A1 I
  115.     strcat(file->full,file->path);2 J9 B) I2 b/ E0 A
  116.     strcat(file->full,file->file);
    : i" @  ~' q3 s9 z" Q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* z7 s; Z" k2 M
  118.     {* r% j% r9 w3 q: v" X. _* j
  119.       file->vers=(float)atof(version);
    5 T! `! v& c( s4 ~: U& u8 R# o
  120.       UpdateList.push_back(file->full);& S4 t9 }" a' {0 O( g* G+ F( W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . X( E5 n4 h! w( a
  122.     }) |+ D" P$ l6 Z8 r
  123.     else  n" S0 Y+ v3 E% g8 {4 H: Z8 S
  124.     {
    + U* p  z" n# U2 ?
  125.       olds=(*p).second;
    2 d1 x5 Z1 h( e  E, ]; M# U
  126.       if(olds->vers<(float)atof(version))
    . p9 t/ L# V" r" [4 g% M( C
  127.       {, i9 ^2 r0 m+ [2 l1 a, a
  128.         olds->vers=(float)atof(version);# E3 D" P+ f  _' E2 T
  129.       }
    ' c' V+ z- k9 _
  130.       free(file);: J+ t+ M: d3 R: ], ~0 ?
  131.     }
    . f5 _7 t5 I  Z& {+ o
  132.   }
      O. \( @) {- H' N+ b5 W  V
  133.   fclose(fp);5 _: A2 T! j5 q, n: s, _6 X' ?, }
  134.   return true;) ?" Y9 ^2 C5 M1 e5 [# G  ^9 _* C
  135. }
    ( m7 T: r) v2 t4 u6 T6 z
  136. 1 {+ y: D) w9 q# K4 R3 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + I3 R7 L0 u% c1 a0 N+ u
  138. {$ s9 I- ?( N9 Z' I( }! T" ~
  139.   TCHAR  szFull[MAX_PATH];! ?  r/ i4 w6 Q/ I6 j" t% |, B
  140.   TCHAR *token,*inter;
    7 E+ ?( k, n) S+ H  D% B; i
  141.   *szPath=0;; I; |- E& [" B# @* Z& u- [
  142.   strcpy(szFull,szFullPath);. L$ J& j4 f; R$ O" _+ Y( t/ p
  143.   token=strtok(szFull,"\\/");
    + }/ c' V$ J% a3 {+ j+ Z! I
  144.   inter=token;$ `) h  I5 E- t/ U: w
  145.   while(token=strtok(NULL,"\\/"))
    ) w2 e: O# A1 k
  146.   {: N' h2 {/ {  p$ t3 J( p
  147.     strcat(szPath,inter);  R# x/ i: J/ F: t9 h  j5 |6 x& I
  148.     strcat(szPath,"\");' ]! H$ M$ w( h' q* x( L! G; w
  149.     inter=token;* E6 V; ?) D( i; {1 B" t
  150.   }$ }% ]6 W2 {# q( a
  151.   return strlen(szPath);; l: m- O) _5 r
  152. }0 w  Q1 L( ]* t; y* P5 o1 ~. E
  153. ( F* y! V3 M! c' O1 ]- a9 [4 u
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 u' O8 J* }8 c( _4 _, F& {0 x
  155. {
    0 b8 R' ^, {" H7 Z7 N6 Y! V
  156.   DWORD attrib=GetFileAttributes(Target);! s6 k" f+ C4 L  j
  157.   if(attrib!=-1)3 u, O& e+ U3 ^* Z, ^/ }1 I
  158.   {8 k) L3 ]: ~9 ]1 m# w1 \; U! {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% _% H6 y  l5 T
  160.     {
    % @3 o+ W& d8 s  Q- H, D+ r3 N# @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 d+ D0 @3 `) `! p( c
  162.       SetFileAttributes(Target,attrib);, R- ]1 z; f+ u) q% J: X* f3 K
  163.     }" o% [/ S: V3 H8 v  i# i
  164.   }. S8 S" H+ c  ~! e6 N
  165.   CopyFile(Source,Target,Erase);
    # w" @9 b( v8 N. R! ^! t  L/ g
  166. }. ?: B( y3 p% O

  167. % O& Y0 ^  |5 E) N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( n- D( E5 U& y, j! d
  169. {3 E2 Z- g/ K+ H2 _' z- `
  170.      FILE *fp;
    ' D9 @! {+ f- c# Z
  171.      char  szBuffer[8192];
    : |0 O: R/ I  t( F9 b0 H0 v
  172.   va_list  argptr;6 q/ ?- S: c0 T# ]0 K& l
  173. 2 ]% w7 k1 m# m" w
  174.         va_start(argptr,message);
    1 a  D9 z7 ^2 p& `6 `& H+ U" ^; p7 I4 L
  175.         vsprintf(szBuffer,message,argptr);# H; S! m0 Z+ h
  176.         va_end(argptr);- c9 }4 s1 z6 f$ S) Z/ I
  177.   fp=fopen(FileName,"a");
    / K8 Q. m$ B" m
  178.   if(fp)8 t2 x: V/ X0 x
  179.   {1 [, Z$ e9 w. s  \0 F
  180.     fprintf(fp,szBuffer);
    / f# t! Z+ p# B( [1 ~+ K! g5 b
  181.     fclose(fp);' Z+ q: G8 X& R# T4 s
  182.           _flushall();
    ! z5 H6 R, @4 q, U' G
  183.   }- }) T3 D) t$ r& M( S' j4 T% }
  184. }
    3 F' ~1 o: U) }+ j1 V1 d9 z; r
  185. 8 c6 n4 k" c; J0 Z3 x( v
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; ~9 ^6 o4 D% T4 J4 w0 m
  187. {
    ' X5 g" B3 m8 p% t$ E
  188.      FILE *fp;
    ( P- K8 C% ?. X6 D! S
  189.     DWORD  attrib;) I) c( @& Z. ^7 Q  ^
  190.   attrib=GetFileAttributes(FileName);5 U$ r( d- A+ h+ M
  191.   if(attrib!=-1)$ ]5 Z) V# N  E: d8 G4 B
  192.   {
    ' U: R2 r  \# J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! x+ R  C( c( H( S& \/ O* _- I
  194.     if(!SetFileAttributes(FileName,attrib))# ^, S2 c* }' Y+ i* J7 \! A8 B
  195.     {7 C( K  s0 u5 h
  196.       return FALSE;
    0 d* h8 }# A2 R7 @
  197.     }
    5 w' R& ]5 k) G3 G8 c& [2 {6 D6 \/ j
  198.   }
    + {0 P2 S- v2 F3 \
  199.   fp=fopen(FileName,"wb");
    , ~; U$ L% ~" X1 r0 Q
  200.   if(fp)
    * ]! [0 F- G; _+ D6 K
  201.   {/ D( `: {! }$ b, m
  202.     fclose(fp);' S' t6 `' o6 j/ r
  203.   }$ s1 I# B% {0 s1 y$ w
  204.   return TRUE;
    - `- C* I5 x2 d2 c  k
  205. }
    5 @8 q- z1 Q( m" x

  206. 5 H! d, p, R! G4 ^: J  A
  207. BOOL CRevAppApp::UpdateLocalVersion(void): |8 B* E+ t4 k1 f
  208. {
    7 I" V' i5 F  d' q
  209.   char filename[MAX_PATH];- W! B7 ], h4 f, X
  210.   LPUPDATEFILE file,olds;
    * i1 h$ Q) ^' @" g6 N
  211.   std::map<int,CString>::iterator i;
    ! {/ r# ^9 L- {( I# g$ x& n8 ^* J  I  k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 j; e. }+ M+ N( Z
  213.   std::list<CString>::iterator l;
    " K0 n4 B: u/ D8 I
  214. + {& l+ m5 J# L& u/ B* t, J; V
  215.   if(bFirstUpdate)$ l$ Z2 v: F) ]/ S* S
  216.   {
    ' \9 L; @- D$ E  C1 v1 h
  217.     dwCurrFile=0;
      u2 g0 A  V8 k$ s6 l: s
  218.     bFirstUpdate=FALSE;
    $ N' s2 v) A$ F& m4 k1 Z% y7 ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 R# L/ m# D- V" k& h9 p
  220.     {
    ' R1 U- p+ f* v# P5 [! K- v
  221.       dwTotalFiles=UpdateLocal.size();& X  U+ Q8 J3 A5 r: @6 y
  222.       dwDownLoaded=0;# C0 V# ], G7 o& e* m8 K
  223.       bSilentStep=FALSE;
    * |# L& N0 Q1 n* P/ _7 U7 w: o) ]
  224.       bCompressed=TRUE;5 e5 m/ ?& O7 E- w7 Z, B
  225.       strExtLocal.Empty();
    0 y( w3 N4 I2 b8 S- I" y0 r' x
  226.       strFullName=(*i).second;9 i2 {& `$ z# S* A
  227.       dwProgramState=AP_CONNECT;( t5 `* u$ @$ U! k# Z* g$ U2 U
  228.       return TRUE;
    # _: g! H! _& u0 a7 n# q
  229.     }3 S1 ?  V4 k; B) |$ a0 j6 g  Y# l/ N
  230.   }# V/ o5 V" R7 G* Q6 }
  231.   else if(bRestartUpdater==FALSE)
    / E" Z; |7 P8 S$ E. x% @4 ]/ p
  232.   {
    / M. r( A) g3 w4 E/ _
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    9 c5 Z/ c0 n' Q  y6 E/ h; p
  234.     {
    ( W4 A* U! d; h" ^
  235.       file=(*p).second;
    0 d; L8 |+ J, ]: @  Q; n2 c  Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
      S6 {( @1 E) V5 c0 z8 Q
  237.       {
    ; A+ V& [# F/ [7 F; T; s0 d% u- `
  238.         olds=(*p).second;. Y2 s3 U$ d7 }9 k
  239.         olds->vers=file->vers;' t: |6 \3 X  ~/ v2 ~, N3 I
  240.       }: h  U9 M/ C  }6 p3 n$ m
  241.       else
    3 y) y; I, b5 X, |9 M# E
  242.       {5 P( p! ?1 V5 a8 C4 \; |9 M" Z6 }
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& b0 b) [/ y* {# S3 g0 K
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    0 g4 k! y6 W# G, P: o
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# }  R- g3 d6 u; z- s6 i
  246.       }" C9 a# p; ~! c. j+ s
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 N+ ^) ]6 r- p( D4 D; h0 ]' h0 s
  248.       sprintf(filename,"(%s)",file->file);
    % T( K! g( h, ?" W! [% q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, U+ A1 o5 J& ]! e  G$ X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 x! @* d3 l7 B8 I
  251.     }
    : }  ?$ R& @- R  V. O3 b
  252.     dwCurrFile++;: Y5 _8 e5 r7 m  p5 y7 ~$ A# H/ r
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 ]# |6 g) n5 l% N  g0 p
  254.     {" l: z1 G7 s1 u' S- S) c% ~
  255.       bSilentStep=FALSE;
    . n2 s/ {7 s( R6 g, S
  256.       bCompressed=TRUE;
    % r. n' y- v* p" z  G* A; L) o
  257.       strExtLocal.Empty();" j1 c/ R7 y2 _; z* h- N
  258.       strFullName=(*i).second;6 H8 `3 f+ {. s$ b' e( d
  259.       dwProgramState=AP_CONNECT;
    6 S' V3 C: M* m' F+ O8 l8 {; ~
  260.       return TRUE;; n# m6 B& S. a$ Z6 x: b* m: U
  261.     }- c0 U; ]3 z9 i- N6 h
  262.     if(!bRestartUpdater)! A) T  F6 S4 l, a+ i1 |
  263.     {' r, U3 e& P) [! e
  264.       int iCurrSize,iFileSize;% M+ u* v; v4 `' C9 d- C: V1 x
  265.       iCurrSize=0;
    . @* k- O1 u( ?$ y
  266.       iFileSize=UpdateList2.size();# {4 U6 l) I7 x2 q& D; z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ K4 Z: _9 \7 }( |
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");$ W, a6 S$ V6 V: r+ O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( \6 S# y) d/ w- y, h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' T2 p3 p1 f9 H7 j+ {% E
  271.       Fclearf(".\\update.dat");, x! A' V8 L: q* M* E% C
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . Z% `' q2 A4 ]# `7 t7 V
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , _3 H6 l: H* D
  274.       {
    ' x, n9 z2 a0 ^2 A) d: P4 |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ L, K/ A( Z, n4 R9 O
  276.         {
    3 i; ]- c" `8 h8 F1 }1 I  H
  277.           file=(*p).second;
    . u! M7 S/ c+ ?" A# \/ `
  278.           sprintf(filename,"(%s)",file->file);1 e/ D, q" W3 K8 |+ u; Y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : v$ I4 @) l; b
  280.           iCurrSize++;. y( E, v) w) _  z8 n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 m. @# ?% a3 l9 S
  282.         }
    + Z& n& n8 S% l8 W/ |4 f; J# ]# f
  283.       }1 G6 C0 {. F  G( `/ ^! v8 N
  284.       unlink(".\\update.txt");. U* `: Z/ v! I. O! f
  285.       unlink(".\\update.tmp");
    8 K' |' k0 M& G8 M% h
  286.       Fclearf(".\\checkversion.dat");7 n2 ?8 L1 O- [9 v" ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " z# x, w: y/ }" H' h+ k7 @4 w
  288.       if(UpdateLocal.size())
    # N6 V# R  @+ \" z
  289.       {
    8 p/ ^+ w4 Z9 p. r- t9 w5 w3 o4 G
  290.         UpdateLocal.clear();
    + X! e' o! B' q2 T
  291.       }! V! R/ t+ i0 p" F5 N; a" [
  292.       if(UpdateFile3.size())
    7 W5 ]/ N9 f# Q: R
  293.       {. l2 V- Q8 R+ g6 M6 t+ M7 \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) a1 P" N$ ^* x9 O6 P6 c
  295.         {- M2 W: o# T* r  V' f
  296.           file=(*p).second;
    ( _  l4 u6 ?( a) b7 F9 g& S% p' H
  297.           free(file);
    5 D  n; h' O, a+ V1 f5 ^# c7 H# {
  298.         }
    7 V" U) t3 x; s0 j% `9 l% \
  299.         UpdateFile3.clear();
    & h# J5 o% L0 P1 u/ q4 r, z7 j. U
  300.         UpdateList3.clear();
    . `" l% S$ L) t3 G- h1 }* e
  301.       }
    % x- I9 G3 Q* w$ \1 w. D
  302.       if(UpdateFile2.size()), U) {4 C' x& J& f) K
  303.       {
    7 y& V0 _- _9 \& A$ a3 h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 l$ A- z+ P2 N2 i' c# r
  305.         {
    ' {( x: \* b  c) B6 ?* O
  306.           file=(*p).second;+ T2 F: V: j: @0 J! d) p- K1 u
  307.           free(file);
    $ X2 D$ ^2 m! k) w! w$ d7 [& u
  308.         }, y; R* V7 Z  B2 ~1 Q8 h1 P
  309.         UpdateFile2.clear();  W! w$ X) M1 Z4 M) M6 e
  310.         UpdateList2.clear();  [- @5 [+ o. C6 R+ |
  311.       }- q  t$ p  J, O1 x. }) T, r
  312.       if(UpdateFile1.size())
    4 i7 C8 P, R2 n$ [' x8 V# `4 v6 h
  313.       {+ a# U! @, u# A5 e3 h; K8 {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    1 v# x; R4 G( @. y
  315.         {, B$ @2 p, a0 s4 b. |, V
  316.           file=(*p).second;
    ; ?, b6 y: S: V: N0 i( |
  317.           free(file);
    9 g( Z& Z/ ~: Q1 Y0 _& \
  318.         }
    6 Y8 w7 ~# U8 R5 j
  319.         UpdateFile1.clear();' Q% @% h' k) Z, x
  320.         UpdateList1.clear();5 M4 |5 @" m( e0 N: V2 W
  321.       }* u0 R4 ~, u4 p$ p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 m* C6 ?) ]" ~; E
  323.     }/ D: p+ @0 ?8 ]. L, n; u: I6 n
  324.   }
    + V2 ]7 n' H0 D2 D" c
  325.   return FALSE;# F( ~/ C# O/ b  X8 R
  326. }* |/ n; x6 [- c, d' x8 d5 p3 t
  327. 3 O" ~& n4 t6 B' d
  328. void CRevAppApp::ClearAll(void)
    - G  i+ P, C2 E- }3 q6 i. P- J7 A
  329. {
    ; K6 P9 a9 W9 @( n: n" a
  330.   LPUPDATEFILE file;
    ! v4 x1 z$ l- _1 X7 v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 p; U* m- ~: h, f
  332. : I3 q( e, _/ T) H+ I' a/ \
  333.   if(UpdateLocal.size())
    8 ~; B, ]  `: D: h8 L
  334.   {
    * K& W$ s8 F+ g' |# f" C3 N" [
  335.     UpdateLocal.clear();* F0 o' E) G# Z+ G
  336.   }6 Z% {2 d, ?3 W/ D  @% O, v
  337.   if(UpdateFile3.size())
    # j, U0 O1 U7 v8 ?
  338.   {$ q- I0 s  W+ x/ d8 @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' W0 u, {' Q, O% R( e* i
  340.     {' Y( R' b$ M4 V4 q6 s
  341.       file=(*p).second;9 x6 |' u. x/ z; @$ |; @5 `6 z
  342.       free(file);
    & M" ]$ |1 y+ O1 l
  343.     }
    ; m, j( F8 I$ X; u2 T
  344.     UpdateFile3.clear();
    * O4 d  C: s: b0 I1 F$ l9 A3 L
  345.     UpdateList3.clear();
    ( d" k, @/ B! j% I% a9 g) m8 x
  346.   }
    ' d# B1 G! g, }& g5 ]
  347.   if(UpdateFile2.size())$ {6 P) H$ w/ Y- K
  348.   {
    7 c) s- q! i; h0 A$ F- R: V8 _
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) d) _8 d8 ~& _- n
  350.     {
    2 M. y/ p  ^8 q
  351.       file=(*p).second;8 _5 q2 B, M/ t* h, s
  352.       free(file);. z# j2 ~7 D( D
  353.     }
    , @( B7 v7 {' d. c: g: b
  354.     UpdateFile2.clear();
    , s* z6 ^: A9 Z( a0 _% m, O
  355.     UpdateList2.clear();
      B1 r( o; y: }/ G( S# {
  356.   }
    . |  l3 f0 E+ O. w2 ?
  357.   if(UpdateFile1.size())
    $ k. \  `% r+ C* j$ q
  358.   {' r1 z4 Q2 T' q: c6 o8 y+ m  K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 K4 B( e" z& L
  360.     {7 L/ ~8 @; r/ S: d4 L0 y5 Q' s8 O
  361.       file=(*p).second;4 z3 _1 I% n  y& Y: O
  362.       free(file);
      ~8 n% j: M; H; l6 @/ B
  363.     }
    - Z, P7 o( \$ p" d
  364.     UpdateFile1.clear();
    8 X4 b5 Q% |: ^. R/ v9 r
  365.     UpdateList1.clear();
    ; y) `+ ?7 p! g9 _% x( d% j* k
  366.   }! q- j0 F: ~  w8 M
  367. }  
    5 l; @8 D. w6 e- l6 q) {
  368.   
    # e6 K# l2 g# w# f. B# h
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! i$ F/ v# }7 R7 @$ x2 z5 b
  370. {
    6 q/ g( Y* q) ^0 @2 m0 S! H$ d, I
  371.   int c;
    . W2 [5 V7 o+ A( `9 l
  372.   LPUPDATEFILE file1,file2;9 M& K0 K9 z8 E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , Q1 ^6 y5 u) m
  374.   std::list<CString>::iterator l;
    2 H/ h$ F  Y$ a8 a9 ~( L

  375. - Z. g$ x4 m2 w) W; n( v8 p
  376.   UpdateLocal.clear();5 ^" r2 Y. V& c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) D( L! F8 a9 j5 t
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ q/ b7 {) K$ a7 B% a' _6 {% S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 T8 S# v! p" k  K  N% \2 _
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; P6 ]% x/ G% u* t$ b! G8 s
  381.   if(UpdateFile3.size())" Q0 k& [* i+ Y8 v+ {+ L
  382.   {
    ) b2 W8 T2 \2 Z/ R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    1 q7 R" ?' U: K! b( k, i; }
  384.     {
    6 I2 e) `1 |3 t0 |2 ^2 O; Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    - H1 }9 c, {- Z; {0 P/ i( F0 r' z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 h* H3 U( O4 T: ]# y
  387.       {3 e' S; O& s$ o9 l0 T
  388.         file1=(LPUPDATEFILE)(*p).second;
    : X) [. T6 r" }  Q0 _
  389.         file1->vers=file2->vers;
    % b5 S- E6 t; S: _* {
  390.       }5 \) m8 S; d% Z! f+ J: `! D5 k
  391.       else% V' v! q8 V/ e1 k. V
  392.       {) ]: b8 ~) X1 p  l9 f( i6 E, e' B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- `& r( F3 ^7 m( r
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; }* r! A! v+ d  e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' f1 A" L3 l" E9 E- Z
  396.       }$ c' y) ?- f) n) W* j+ V4 |- f+ j1 W
  397.     }/ r# ~4 s* e& f3 d/ l  }& o9 T
  398.   }
    0 \3 C7 p6 a6 s( X% {3 I- t9 ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# q8 [6 Y" T% m/ ^  h* e
  400.   {0 f2 W0 y$ a6 A; U* @% r. U) f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 l- F; _( f% Y7 Y5 R0 r( w+ z
  402.     {1 A9 F- ^; y4 M  M  c' [6 }, F, R# k
  403.       file2=(LPUPDATEFILE)(*i).second;
    " k  v. n4 S1 F
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + ^6 {5 L( _1 U/ X& Y  b8 M
  405.       {
    % T# [  C# I) j& J9 n! m7 e
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 T: Y/ k9 ]5 _8 v2 [
  407.         if(file1->vers!=file2->vers)
    ' A8 B, b; ^6 D( a* f
  408.         {  j$ B' ]8 F6 {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. o$ J, q3 l& ~) [) ]0 `1 L! B
  410.           c++;# f) z  u0 f) D- K% C! z
  411.         }
    , Z% X& d# n1 W9 ]
  412.       }
    0 W% N  a/ R1 K0 ~8 ~1 F) N
  413.       else+ `9 F: ?( ~. V4 Y
  414.       {  L% B: S8 ?* }: ]: p
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , Z: q  H( ^& _3 s7 l6 l( o, K
  416.         c++;
    9 u3 L! p- u) V; L# o3 `! r. A4 z  L
  417.       }
    ) m3 a* X, W1 `! F. r
  418.     }% O8 t% m0 i4 _/ `2 y7 Y3 [: |
  419.   }
    . v/ ^4 s- E: _7 c$ q
  420.   unlink(".\\DownLoad\\update.txt");  M8 q+ r. d5 h! b8 z' L5 C
  421.   if(UpdateLocal.size()) return TRUE;) b1 x$ U/ g* F) H9 e7 [0 z
  422.   else                   return FALSE;0 g. @: {0 a6 u& A
  423. }6 m+ L" m# e7 ^$ U4 `
  424. $ N% s5 @- i" [1 c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      ]4 c- d- z  E3 S2 r, g# d; b, I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ \# F" ~4 ?& z$ P% a# e1 k4 {1 p
  427. ; B; b) Z) q. M4 w- @" u  k9 X3 `

  428. & |! i! J  Y5 d3 G# |% m
  429. * {; o* }/ q+ O- S/ D: b1 W
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): e# O8 J3 g1 O9 `+ x
  431. {& {( b8 ?5 H% p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 ?& p' `+ W* E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) B8 c% ^/ R/ t: R0 x. i
  434.   {+ T1 R4 n( n" ?1 A
  435.     char szLanguage[50];9 X  t; z' X* Y" d8 y/ Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# _, c* s- K) X
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " H# f# J/ l- S" F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 |: H- x; Z& C0 _
  439.     else                                   m_iLanguage=ENGLISH;
    $ _8 _& |1 T1 E9 Z2 S  i( ~
  440.     char szRegister[100];: F3 b6 t! c& s5 G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 k0 n8 o  s* z! Y1 k2 s& c
  442.     strRegsName=szRegister;
    - Z8 _7 e% c  i4 H; N9 V
  443.     char szPatchURL[100];7 }8 o" j9 G& Q8 o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! l! |/ ^5 B) ^8 t
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 ~0 w) r( |, {1 u
  446.   }
    4 X2 {9 {) G( A6 h) f
  447.   else2 [  e7 e% S- b2 u0 f
  448.   {
    " Y! p" z  z5 |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 F3 \2 t) ]' C' ~  G9 ~: ~
  450.     strRegsName=DEFAULT_REG_URL;
    4 n+ V7 ?3 l  _+ H# T8 y+ m% o9 O
  451.   }8 j7 C4 K* @: u  n
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ X7 Z$ N0 ]6 N  ^
  453.   {
    & t, r2 [6 P# c  S# M
  454.     char szIP[50];! Y) }* d- |/ |& u1 v0 ?' {( i' L
  455.     char szDIR[300];4 x" g/ f  `, n# N, Z2 [- E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))( b1 Y$ ~5 j2 x: O6 A/ q8 S1 q! ~
  457.     {
    ; `8 |# y+ n1 @% U+ [9 _1 C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");) H, ?+ a. ?: Y5 t5 X) T  \6 `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( M7 Z! l6 s, @2 b/ C
  460.       strHostName=szIP;5 q$ N$ f9 ]3 l% X2 S3 J
  461.       strHostPath.Format("/%s",szDIR);
    4 R7 o" W' ^' \  Q) J: _/ H/ d
  462.     }
    2 _8 T" {. m' s: F1 y! v# s
  463.     else. J2 Z  d* C0 |" D3 W
  464.     {
    4 [8 V- G, @1 U% g+ [) i! `+ m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 m: ~7 E6 ^0 e) u( @; i' p
  466.       {% Y/ `- O" r- O. t6 W
  467.         char szLanguage[50];
    / l! t5 v/ y# B" F3 X3 j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( c/ }, k$ U: C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) N; A/ s( a" s& O4 E1 E, l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / B4 y$ d; O6 |) F
  471.         else                                   m_iLanguage=ENGLISH;
    2 `9 Z3 p- g$ A( F( N
  472.         char szRegister[100];
    + @$ P8 c- ^0 r/ t' b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, p, J! k; ^0 e) D1 I0 A; y$ O* ^1 G
  474.         strRegsName=szRegister;3 E4 m0 s  y- Q% Q$ `$ F  ]  {% `- z
  475.         char szPatchURL[100];
    7 ^7 ~) A4 u) W! _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) B0 m5 c/ I5 d
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ |9 n* U  b7 C' s9 U3 \8 o9 k
  478.       }
    ! N' M! g, `: Z+ K% m) u$ C
  479.       else+ L6 z$ J1 E6 O' p8 A7 i2 [! i
  480.       {
    ( x4 g0 }8 V7 m* P) W9 e" \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 Z- o. V. o( V% F% T6 U# C5 A
  482.         strRegsName=DEFAULT_REG_URL;
    " j2 e( `7 n7 t& j
  483.       }
    5 K2 u$ D( u& {
  484.     }
    ) e! d0 a2 u5 P( d" B! l$ ^* ~1 M
  485.   }8 U! ?$ M/ D- I8 c
  486.   return true;
    9 f+ i- X' {) P/ f( f# p
  487. }7 I' O% n  M) v. ~# U
  488. / A) n( l: m0 M& Q
  489. #include ".\ZLib\unzip.h"; S8 X. O* ~( {1 p. i  f
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 z2 i% `" T- ]
  491. /////////////////////////////////////////////////////////////////////////////( v/ c2 H' G6 ?" J: n
  492. // CRevAppApp initialization
    2 ^9 _4 C7 l' L( Q8 J% p$ m
  493. - C5 E/ e+ N1 R9 u  u, J
  494. BOOL CRevAppApp::InitInstance()  [! E% o  p1 \! h2 d- N+ M$ E
  495. {
    ! H5 p' y! a3 y9 J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    6 T! K1 o1 o# `8 d% Q5 N

  497. / A+ U9 d% d3 K4 H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / R. {" g/ G8 J" w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / t0 C% Z0 y4 L: z4 w. o5 U* H, H9 ]
  500.   {
    ! y" p& E4 a% g
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . E4 Z0 O8 }$ D4 }$ b
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 n2 |( ^3 e" z, y/ E
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% k/ [: ^! g4 X
  504.     {4 i: G. I  H0 ^" q5 ^, }
  505.       strcpy(szPath,szPathTarget);' o. W" ]- H, x3 e0 C( \* E  j0 z
  506.       SetCurrentDirectory(szPath);( R9 W  o7 h! C$ e: O
  507.     }& W0 g/ D: ^6 q7 T
  508.   }
    ; {3 Z/ B9 i/ H, r
  509. #ifdef _DEBUG
    0 \: |* M1 Y! A* z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ `+ g# B; o3 b: u
  511. #else) P; j9 L$ d; t7 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( X+ w' B% k  a; e; b7 N2 i
  513. #endif
    * X) Z9 p' S9 S: G% {4 X
  514.   {
    + G7 {: @5 z0 N/ F- f4 D
  515.     char tempFileName[MAX_PATH];
    * I% E1 T# e9 q: f: v7 r5 j
  516.     strcpy(tempFileName,szPathSource);  O! g8 q0 P! }4 \! Q& @
  517.     tempFileName[strlen(szPathSource)-12]=0;) z: Z2 \/ E+ r# [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 `: r% r+ l4 l1 h% U. J# s+ x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    : e; i5 d3 g6 v: k4 B  g0 m
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 j- n: R. A# h+ S# W% d) L" G
  521.     return TRUE;
    : h, h3 o4 ?6 W! X& f
  522.   }0 J: s* M# O/ a3 Q
  523.   // Nuke 0118: Delete run.exe
    ' u3 f7 F2 b8 \+ B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 |; E6 L& B5 U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    9 B$ U2 e" |$ C5 q. y
  526.   if(!ReadCfgFile("Config.ini"))1 z; ]) t/ L; j8 m- F7 K
  527.   {: U( f2 V0 x2 c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);# y, _* Q3 w+ O) A- ]$ c0 \1 {: n
  529.     return TRUE;
    * l8 r/ f3 d. z* x/ T
  530.   }
    : \, B4 b# O$ f* c3 d! O+ K8 R5 O3 q, g
  531.   HANDLE mutex;$ y0 z  @7 r$ o% O( e- \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% c4 }! O6 A, n* e5 D+ ^
  533.   {
    ( R  R8 g  k% y1 n6 q4 q, \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; D6 o6 @+ ^6 T4 y1 g
  535.     {
    , I4 w4 m% N; W. q
  536.       CloseHandle(mutex);/ ?8 Z: A' a. N+ b4 ^, [) ^* q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ ?  K. J" A$ f/ S3 H$ e0 Y' V9 x
  538.       return TRUE;$ [1 I$ z3 \! ~. ]
  539.     }
    + e1 J0 q4 v' A- @- F
  540.   }  
    & G0 p/ v2 n8 d, C; f. x
  541.   CloseHandle(mutex);
    7 g3 c: Q/ I/ j* D3 N9 Q+ R3 r
  542. * B9 n$ z  s+ C, p& p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ z& ]+ j* O* D: E9 R' v+ c
  544. ! q" J0 \9 Q# Q3 w$ D- z( x. _
  545.         AfxEnableControlContainer();" Q, g% n% w& n% l" S9 x
  546. 9 O* r0 v1 f- l$ F& {
  547.   bCanUpdate=FALSE;3 v8 y7 g2 e0 R4 ~' u1 k
  548.   dwStartUpSteps=1;
    2 N. ?1 {; i" Q& V% A- J* [
  549.   dwProgramState=AP_NOTHING;
    ( R& B0 u/ `! l' n5 Z

  550. ; Q. W* \/ J7 |
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - j) ~/ s# a3 c; H9 a8 N9 d
  552. 8 I0 Q1 h! J8 n
  553.         // Standard initialization
    0 O4 a  U, s  Z5 {  v- D) H
  554.         // If you are not using these features and wish to reduce the size6 _8 ?. Z) D# ^
  555.         //  of your final executable, you should remove from the following
    7 L, ~/ d* }, Q8 u6 d
  556.         //  the specific initialization routines you do not need.; G# F( M3 a5 R$ N

  557. / |; R% F  U6 q3 ~
  558. #ifdef _AFXDLL
    5 m) D- T4 H( k8 a. A$ c" ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 H, h9 C+ |, K6 d* M& o. \
  560. #else
    4 c+ _3 r9 s8 k2 r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ j2 c" Z/ p# W9 b3 ]
  562. #endif4 k1 g/ \+ T& D- d" K) N: @
  563. 8 S' {& N0 s4 i4 a. q
  564.   dlg=new CRevAppDlg;
    8 Z3 }% p. K# c$ O
  565.   dlg->Create(IDD_REVAPP_DIALOG);" W( z4 ?; j& q/ ?6 B9 V5 U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& }! `5 j& k  V- ]
  567.   m_pMainWnd=dlg;
    2 {& z! P( C/ I* \
  568. " ?$ }$ p/ K0 S$ M3 v  y% g
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) T2 S6 W) Y, A) B' }) v
  570. 0 l! B6 V0 [' S
  571. //  GdiplusStartupInput gdiplusStartupInput;
    7 W% K2 z9 ]0 A; i2 I. W
  572. //  ULONG_PTR gdiplusToken;0 \( s- z$ Z& K; I* g  I" O5 F
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* E1 [( D' s% q0 W, K( Y

  574.   Y- G5 m# m/ L% e6 L- e+ V3 V
  575. //        CRevAppDlg dlg;# q5 I+ F: L! W& z/ |
  576. //        int nResponse = dlg.DoModal();, d) X  |; R. w, ]" Z- N
  577. //        if (nResponse == IDOK). s9 T8 R  w; t" f1 `
  578. //        {3 }+ t1 i5 g0 i4 l! X$ Q% Q
  579. //                // TODO: Place code here to handle when the dialog is
    5 N; W9 |) m* G* p" l5 [
  580. //                //  dismissed with OK
    + J$ x6 x- w9 W9 ~( f
  581. //        }! g+ |2 r' {( {
  582. //        else if (nResponse == IDCANCEL)
    7 d! M) C9 |# K0 C" h% v
  583. //        {
    . @( g$ P7 [# b7 K& w2 p
  584. //                // TODO: Place code here to handle when the dialog is0 Q9 `7 B; A8 N6 ^4 Z4 R* a% P, d, T
  585. //                //  dismissed with Cancel
    ; ^2 u8 K) O6 Y7 E4 w: d
  586. //        }
    ' K! y5 {% a& o7 ^0 @
  587. # t$ q: H& b+ N
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . y0 U" H$ J$ h% F' Z6 j8 L
  589.         //  application, rather than start the application's message pump.
    + E) X+ H9 ]. D& t. l, |8 ]
  590.         return TRUE;
    ! G2 U6 r6 H  u! V' _4 T
  591. }
    & k+ x) q3 A, r- ]  Y. e, |8 L

  592. ( c1 S/ I7 j9 d3 B
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : a5 w$ k' {% s- W
  594. {$ B4 Q' ^( R0 b1 @. K6 j
  595.   int i;0 g; S/ @: R, o, g# w% ?) n' E5 x
  596.   char *szRet;: ?! w6 Y: i9 M0 }) D0 L( P$ b

  597. 6 T% [/ q" ^6 [4 K, M4 E" X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " N2 p8 o4 o  A8 e, ^+ h5 `% B$ K
  599.   if(sztoken)2 O/ n; {7 F3 S3 ~7 J" D
  600.   {0 A! S' G3 H4 d0 y* P
  601.     szRet=&sztoken[itoken];- p- \& e+ u& s: y9 }4 O
  602.     while(sztoken[itoken])+ K! g( i+ x# t  g
  603.     {
    , @6 b7 ~4 L. q' \1 U4 d3 y8 b
  604.       for(i=0;i<(int)strlen(token);i++)
    0 ^/ `; p, b- G7 T
  605.       {2 O4 y1 y: [- A/ H+ |5 t4 R5 e7 X
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    9 P; u( e4 t" ~% v- ?% h% h
  607.         {
    3 h0 C( L4 w* ?# s/ n
  608.           sztoken[itoken++]=0;
    $ H4 p' L1 K$ i1 g6 ~
  609.           sztoken[itoken++]=0;
    / A+ [1 D$ k# y, r3 j  p- P
  610.           return szRet;
    / r0 Q4 |2 D( f" [( A5 E
  611.         }
    7 W$ ]4 z2 t# M1 [% l/ @4 y
  612.       }  D- b  O8 [2 R2 a7 C$ X* G2 i
  613.       itoken++;
    : u0 _3 t; T9 l+ P4 B, u; k, r- `
  614.     }  {: g! O% R6 o  Q2 i
  615.   }
    ( K/ f1 E0 N  I2 w2 `3 e
  616.   return NULL;1 L2 J* s2 H  Q
  617. }6 F) M# v7 q( o
  618. # |  ]' \* `* p+ a0 u6 V9 m: m
  619. void ProcessProc(long Total,long Current)
    , ]$ v- J, P: ?3 O) S4 T' _+ k3 g( h1 k
  620. {
    9 E! P* _4 ^& I$ U/ {! W
  621.         MSG msg;
    # B- ?' N' e8 z- c9 ?' r6 E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& p5 {+ B1 O4 E, O: I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  z9 @) P2 x' r5 U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # o4 s0 R8 ^) I$ Q+ W1 _
  625.         {
    ; e. i+ p; z3 r) F  S6 W8 V) P
  626.                 if(!GetMessage(&msg,NULL,0,0))" o4 m+ V. T, u1 E$ R- q
  627.                 {! a9 H$ r; k0 B7 M1 l( D
  628.                         return;
    / A; @: Y$ X+ z9 l/ e- @7 U
  629.                 }3 X7 }3 ?- N* x' w/ V8 U' }' ^
  630.                 TranslateMessage(&msg);
    # m' i$ l2 {' M' }  q+ l9 B! D
  631.                 DispatchMessage(&msg);2 c& f/ Y( _- U& ]( K
  632.         }       
    3 f, J- G/ v6 L% e5 m/ q' B
  633. }
    ! U" _; V6 L5 I

  634. 7 q+ U( Z  c( j. ~" T1 J( H1 i
  635. BOOL bFirstChar=TRUE;
    + C. F8 N! Q& N' [/ h( N

  636. 7 I% N) t9 }+ s! D8 U# n; U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / u$ [2 o  `! w3 S
  638. {
    / f9 g# v' m$ k. G: ^# v# z9 ]1 _
  639.         // TODO: Add your specialized code here and/or call the base class7 t1 s" M6 `; N3 F. g+ T7 P
  640.   switch(dwProgramState)
    & J( f' |# y- ~& y  k# ?* H
  641.   {
    8 Z7 T+ j1 R. F  H2 }
  642.   case AP_NOTHING:
    ! q: P9 o* A: T  e3 F* o
  643.     switch(dwStartUpSteps)
    & H$ x% Y5 Q! F7 U% y- }/ R5 y6 U
  644.     {
    6 a+ d, W; V5 t: d9 c; x8 m9 e
  645.     case 1:( x2 j3 P% D. p1 S5 N
  646.       {
    ( _0 i+ z: z% N: |- U
  647.         int i;) {. e# ~8 [; u  B* F3 w$ R
  648.         CDC *pCDC=dlg->GetDC();
    , R3 q/ Z  Y. l+ a  K( x# C
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! a5 V' R5 w9 k) q7 ~
  650. //        Graphics graphics(hdcwnd);
    % d: `8 D8 K1 F7 X2 Y3 F7 a0 u9 s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 t, F" z. L8 H! o8 B: S' b' M! R
  652. //        INT iWidth=bitmap.GetWidth();
    . l5 ~" m8 {9 t8 O" W7 x+ i: K0 B
  653. //        INT iHeight=bitmap.GetHeight();9 g6 s$ L# N+ K: k
  654. //        Color color,colorTemp;8 X+ u& U& s5 E9 C( u
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' U3 _) H- ^4 N7 f  |6 z
  656. //        {7 S  K6 ]5 j  |' r, Q) Y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " w0 O' B  _6 }$ {
  658. //          {6 J, O* o8 r5 Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# A! D( B1 U+ V- I2 F7 J9 T4 Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 v$ i# T  M. G8 H# J3 P
  661. //              (BYTE)(255*iColumn/iWidth),
    $ G! Z7 [7 W* {4 h
  662. //              color.GetRed(),2 U* }2 R1 [6 o- C) D/ U; `+ x
  663. //              color.GetGreen(),
    0 `! X9 F, V5 l8 g* a
  664. //              color.GetBlue()));: h/ Z7 u. N% E, }( L" U8 C
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , r# l7 H1 S# M- Z( b
  666. //          }
    6 O3 Z% o( }/ M
  667. //        }: g/ E" M2 B8 Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' i' ?. K% ^2 b2 f, |* Z3 O0 s: B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # D4 j6 }  K, Q1 o6 L& y  l2 R& Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ w7 x8 |& c- c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & B4 l/ [# j6 P
  672.         for(i=0;i<240;i+=8)
    % S" E- g% X8 b2 q; a+ g/ V/ \
  673.         {% B& [! O: ?+ E* a3 r1 W
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * w1 J2 r, `% r9 l2 ~* A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 G/ I: E0 M& _, N/ N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 F' y1 e: ~" N' @
  677.           Sleep(33);  S+ N% [- k/ Q" K
  678.         }4 i4 F: X" F( x; V2 R4 |
  679.         Sleep(1000);' L; p5 a% |- b3 h
  680.         for(i=240;i>0;i-=8)
      t& e6 J6 L* Y2 `$ P* l/ x
  681.         {+ [8 S$ v# h* l7 S; f, h- p: l. @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ ?, E: r( A: p/ |( F! T) n8 k# q1 A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 Z4 W: `. X) k; f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 X  E. P9 _& s# {
  685.           Sleep(33);
    # a/ j* L# W- n3 r! H2 U7 W
  686.         }" |/ m( B6 _# L+ c; C6 g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 T$ v0 {- P, U: o$ Q- S8 g. U
  688.         dlg->ReleaseDC(pCDC);
    , C* O# T' f7 O& o4 J
  689.         DeleteDC(hdctar);* @; F% T* H. T
  690.         DeleteDC(hdcsrc);
    ! d  m) G3 G% R5 L9 z
  691.         DeleteDC(hdcorg);3 M. ?- ?9 V+ z+ d
  692.       }6 I! s6 N! T$ X# @- @' L' j, j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 y$ c0 a& |0 l2 M. X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" e" e+ k4 a- @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 u  p& S3 b4 i( }
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % B5 }7 u( ?* W$ {# ~
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( {! p1 o0 H$ B, B8 }6 g
  698.       if(!Dn.Connected())5 F4 G! |! V( c" [, W  L3 t' Z. K
  699.       {5 u+ b/ R- G/ @+ }- r! o
  700.         dwTotalFiles=1;
    , \* k8 J: ?: O: r6 E
  701.         dwDownLoaded=0;+ \2 D  W# n& I5 l9 r3 P
  702.         bSilentStep=TRUE;# v  @3 U. \0 n7 m8 S* ?
  703.         bCompressed=FALSE;8 m: d$ O$ R  ]- A* l3 e3 d
  704.         strExtLocal.Empty();
    / y+ r' q( L4 `" J& d! A0 l
  705.         strFullName="readme.txt";
    ) C) O3 x$ z: ], Z9 q
  706.         dwProgramState=AP_CONNECT;
    # d1 p3 }8 x- g, `' b, ^* L
  707.       }. t/ y+ n( l4 L( E% j4 t+ q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. ^3 R3 v) t! K
  709.       dwStartUpSteps=2;" J& O/ R( j* t' f) g0 k9 [  }/ `! t3 E
  710.       break;
    : u0 J" H7 e6 R2 b2 m1 K( s+ c# W
  711.     case 2:
      a9 i+ ~/ t$ ]& p7 E# ^
  712.       {4 u  _" b/ @+ H
  713.         int iEOF;* z, W' d5 \& f, e9 V
  714.         FILE *fp;
    5 z" r8 z+ ?5 U: d/ ~
  715.         char szString[512];! U5 l+ ]0 {2 d1 l% Z  g2 W3 ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 J) o  F; Y% X/ M# p% |
  717.         if(fp)$ [( X& g  C& m, L: _1 g2 h
  718.         {
    9 _: u/ Y0 Q: z" [5 u
  719.           do
    ) N; K( z5 B) p) \
  720.           {( W5 P  l; [7 L: i$ l* i
  721.             iEOF=fscanf(fp,"%s",szString);. l' u/ B- z. m% G1 y
  722.             if(strlen(szString))! K2 V- B. _3 G9 T% D; T. J! t1 D
  723.             {
    # |* j3 `5 K& i% J4 j: ~
  724.               if(bFirstChar)
    0 n) K$ S" a6 F3 o( n! j" \
  725.               {
    8 q5 u: `) z) W  O$ c' Y% o
  726.                 bFirstChar=FALSE;. N( F+ i8 o6 B, g; N! G
  727.                 bConnectIsBig5=FALSE;3 J( V% M" [0 e3 }- x% H/ B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: N; {9 E( l+ M% {2 F' D
  729.               }3 [2 u. A; y1 u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));! T* T( m5 g+ Y- l% p
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ H2 T; n# w5 z) @; W6 a
  732.               dlg->m_ListText.AddString(szString);0 i* O, [' j/ u# L0 |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 j  }- g4 X9 I/ V
  734.               *szString=0;8 y, d& ~0 A* k
  735.             }
    ) C! b9 `$ ?, Y* }
  736.           } while(iEOF!=EOF);( Q5 E' s# E) N8 R( U
  737.           fclose(fp);
    : S' u8 M) G5 P% W0 C' u
  738.           unlink(".\\DownLoad\\readme.txt");
    ; k" H2 L9 q' f( z
  739.           dwStartUpSteps=3;3 Y1 U0 x2 n- D$ v: ~
  740.         }
    0 M: p5 m  K, W: |
  741.       }5 t% }# P+ z0 Z0 ^5 ~3 Q
  742.       break;) z$ y- z% b. q1 n
  743.     case 3:
    . f/ l, P& {* w" S0 U1 ~3 o7 T* m
  744.       if(!Dn.Connected())
    $ L, C: l! y5 d# m- L
  745.       {
    ; I8 L  _" P" Y1 N$ J1 t' z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    & N5 G3 O1 t- s- q* Z9 r
  747.         dwTotalFiles=1;3 z8 Y, h0 P# ?8 w7 [
  748.         dwDownLoaded=0;
    % c! S1 c7 a2 W7 R5 X9 H
  749.         bSilentStep=TRUE;3 S0 t& h# N1 k$ R' h
  750.         bCompressed=FALSE;+ N% n! l+ Q# i) S- G8 N
  751.         strExtLocal.Empty();. l0 K2 v$ e3 p" ^! }  n/ k
  752.         strFullName="checkversion.txt";
    - [+ |# \6 Q: n; H" X8 G
  753.         dwProgramState=AP_CONNECT;7 ^" }8 H: w* Z2 W5 d4 V) j9 G  F
  754.       }
    / c: _* o, S; C& o- y: @' z, g0 k, F, x/ S
  755.       dwStartUpSteps=4;7 f; v( P5 H0 U- Y( L: i, n
  756.       break;
    / C$ }3 N% V  r/ E- X  `
  757.     case 4:
    + E0 Z7 \/ I; n' s
  758.       {
    - U; L; a+ }. s+ |1 {
  759.         FILE *fp;, Q8 A! B/ ?/ F& L4 G1 `
  760.         char szString1[128];% l: k" X& z9 u% X7 g
  761.         char szString2[128];
    3 E# j3 N( O: h9 k( p% L: ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / l# w+ u  l- g/ [4 Z( ~$ N& w% f0 O
  763.         if(fp)
    9 t2 n. m3 G2 }* |' H% i7 h0 Q8 P
  764.         {8 P+ ^. i- V- C1 B0 ^( v
  765.           fscanf(fp,"%s",szString1);9 V7 b" \& q) U2 E  [1 f
  766.           fclose(fp);
    0 p+ u! N& O" I* V5 G
  767.           fCheckVersion=atof(szString1);
    ! M" Q8 o9 e6 o% N5 E
  768.           fp=fopen(".\\checkversion.dat","r");1 a, N) H" [, S0 `1 a
  769.           if(fp)
    # v' {; V% W: w; T4 |
  770.           {
    . c* v- W. b+ q& r% D; }, ~& D
  771.             fscanf(fp,"%s",szString2);/ h9 n3 W) _1 u7 d' q! t) `; F
  772.             fclose(fp);5 g1 M7 H/ _0 L( |3 y. K# b. f2 B! S' d
  773.             if(atof(szString1)!=atof(szString2))
    9 H' U; F( |' `' E3 ^* m
  774.             {
    + f+ J1 r4 r) O& Y" U) V
  775.               if(!Dn.Connected())9 b+ F3 N: {* G9 t6 `
  776.               {; ^2 `$ m( J# K: A" g7 A% H
  777.                 bFirstUpdate=TRUE;
    0 x1 ^  q  k7 h% q+ R: f' N
  778.                 dwTotalFiles=1;
      ?- K9 @7 n8 H
  779.                 dwDownLoaded=0;! k: L+ Q. S4 K4 Q) @$ p. h6 P
  780.                 bSilentStep=FALSE;
    * c( t, ^8 U2 L. T+ {* @! W
  781.                 bCompressed=TRUE;
    # J& p$ k' B) u, y
  782.                 strExtLocal=".\\DownLoad\";
    3 V2 k# T2 h; G4 x8 l% g& H
  783.                 strFullName="update.txt";7 i) a3 m3 i# ]! Y6 N' R9 p5 [7 _
  784.                 dwProgramState=AP_CONNECT;
    3 @3 T( i9 z3 m9 W
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) p' L( C0 m/ L8 q, l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 T' h) |2 a" {% x1 Q6 x
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + c2 _2 D" d- m

  788. ! w2 T# P) f3 `) |+ I' S( y# d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / s* o* a0 l5 V) m1 P
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . _7 ?2 t9 t" R, B4 a, p8 P0 u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)7 _, I6 _! F/ v* q& A" a  b/ I0 }
  792.                 {7 L$ w8 Y/ z2 I8 U, B6 E
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");2 A7 y0 ^6 m0 e6 x4 e+ r
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    8 s" `2 I3 C: k
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 o8 s" L3 ]2 w3 {& |$ Z* h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 x! ~- D  i3 O& E$ h  b/ V+ ]  J

  797. % R- X& r2 E4 t& A& b9 A  S2 E$ {* [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 L% H: [5 z( G# I3 O" G
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 m' G1 A- k1 I
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 p2 b5 M7 ?7 O
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# b, }( J9 ~% N  g
  802.                 }# B9 U% K- s3 W; B) v  l7 H! x$ o
  803.                 dwStartUpSteps=5;: P; n# r) e- ?( `* N  d0 S5 u
  804.               }4 T. O! e- T+ w
  805.             }
    % A6 `" m" c6 N9 K+ t5 ~
  806.             else
    / g. m$ X4 B( x- I  G! ?* n( G
  807.             {
    4 A+ ~+ Q9 \1 H3 y; D) _) k) K
  808.               unlink(".\\DownLoad\\checkversion.txt");0 K* k; k1 {  B4 m5 E: I
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . H9 [7 @* S! B' y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* _+ r# B8 p0 a1 |' s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 S" L- K7 F$ u
  812. 7 I" d! ^8 i$ y4 G6 I0 R# P5 Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 K. a) h; l2 u% Q
  814.               dwStartUpSteps=99;
    2 i3 P' c7 i' `0 R: d
  815.               bFinishUpdated=TRUE;
    5 Q; j2 a5 C- V- }  S6 s4 i. \1 [
  816.               bCanUpdate=TRUE;0 y/ I' W5 _5 v  E3 t- I
  817.             }+ D* R& A& A; G2 Z  A: k5 D
  818.           }
    : m, X+ C5 y, L. B. I  K
  819.           else
    0 ~9 ?: J  Z* Q; e0 x
  820.           {
    3 n% j! ?- P3 z9 L
  821.             if(!Dn.Connected())
    ) x: B3 ^9 ~9 I$ O' l
  822.             {
    + p1 o4 p; j8 v0 U3 R
  823.               bFirstUpdate=TRUE;
    + B( a9 K" w/ C1 t
  824.               dwTotalFiles=1;( L# s+ R. C# h/ C5 m
  825.               dwDownLoaded=0;
    0 F: V) l- L* n# {- U
  826.               bSilentStep=FALSE;2 X; k& ]! u8 a: Q
  827.               bCompressed=TRUE;
    - F) I& O' x$ T  u( L
  828.               strExtLocal=".\\DownLoad\";4 |7 G6 w5 ~! ^/ o7 e
  829.               strFullName="update.txt";
    4 s" v! w. Q  U. L, C, X
  830.               dwProgramState=AP_CONNECT;. p1 _5 a" T9 g& }& X" u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / e0 P3 [( v/ h' }$ ^9 w: ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 x& Z% j) e3 S. o6 w5 Z$ v. |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");. U/ U: e6 c4 O: ^% x
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 l! M! D( {  F
  835.               unlink(".\\DownLoad\\checkversion.txt");5 |  ~9 N* P* X/ I1 D: v. g' s
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . b9 M4 V4 J$ C6 O9 p9 h" e
  837.               {
    ; f# T2 k, n, N+ f# D, [, u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 n7 |4 A) @1 B; R5 G( C) m
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");# V4 M8 {/ a+ R& T' J9 G) \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ H4 D2 x; n& [, Q& l8 u
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & W* j& |, a5 U9 ~+ f
  842.                
    7 _* z5 U; w- [5 `. g) C, j- E" x
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + V, B+ d5 c/ O. @6 ^) g1 @3 c6 P/ ?/ \
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , L7 y9 F7 B  R, O  J7 f9 Y9 ]" O0 n
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 V7 ~* m9 J, H- k, a# E
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 Z* z  M) K" s
  847.               }- d2 y& d& f* A4 `( T, ^
  848.               dwStartUpSteps=5;0 W/ Q+ \, V$ H; B1 N; n
  849.             }! H, ^& }& V! i. \6 j
  850.           }
    6 T9 k1 |+ _) a/ K- U. E3 r
  851.         }
    2 h. [) n+ C9 x, x( {& G. h: _
  852.         else# B+ G$ n$ V: P  z: C) W
  853.         {
    1 Q3 a4 ]  g% r; Y3 O! {7 E) s/ D
  854.           dwStartUpSteps=3;& L1 H$ T. ?0 N7 X* t
  855.         }
    ' ]7 x: a9 v/ Z0 N
  856.       }% O/ i% B7 T2 `0 F# f. j
  857.       break;5 e7 w1 H3 J' o0 C
  858.     case 5:
    ; D2 g. K6 ^$ w) [1 r7 ~
  859.       {2 V$ x4 \+ t- T3 v
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- ?3 N3 x( C! C" U2 V1 J
  861.         {5 ]7 z3 N/ H6 N& A  P5 x
  862.           int opt_overwrite=1;
    , F: ^  ^* i* g/ K) W
  863.           int opt_do_extract_withoutpath=0;0 v  _' Z' L+ ]8 H; e
  864.           unzFile uf=NULL;
    , }8 G8 q' j* J" X) c& ]

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

( ~+ R1 }" s, ^  }* k) a; \

評分

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