CSUpdate.exe源代码

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

$ m/ k( E  j6 ]* w0 y
  1. / RevApp.cpp : Defines the class behaviors for the application.7 \" Y% p+ k; f
  2. //
    ! o6 d+ G+ C* J* t4 y

  3. 2 E2 p& {/ M9 |0 M
  4. #include "stdafx.h"
    4 ]" x/ C/ t+ ~6 U

  5. ) ]0 ~4 d! D4 U) R
  6. //#define UNICODE
    + R5 x. z: R+ Z# y
  7. //#include <gdiplus.h>! v1 C, j- g3 ]9 T! f1 Y( Y
  8. //using namespace Gdiplus;
    1 w  m+ X8 }9 K6 c

  9. 8 r0 U& h5 G3 g- L- E3 w
  10. #include "RevApp.h"' j; Y) N9 G0 g
  11. #include "RevAppDlg.h"& M! v' A1 ?7 |. J2 y+ T, h

  12. + |( @* W1 S; c* u
  13. #pragma warning(disable:4786)
    # U+ f# |: a2 g% g. q2 }5 r
  14. #include <map>
    # p, V3 a; P& r4 S: |
  15. #include <list>3 l6 b, Y. g6 L0 w7 f
  16. #include <direct.h>, H( J8 Q$ v2 R9 Y1 n$ R' j
  17. . x) x! ~9 ~" t$ P+ z# g
  18. #ifdef _DEBUG
    9 ^- n( W& ^# D: I8 h0 l5 ^: C
  19. #define new DEBUG_NEW
    " t' x5 a# a# X
  20. #undef THIS_FILE
    , e' ^* y7 `* r
  21. static char THIS_FILE[] = __FILE__;* n8 Z( p, v8 e5 ^, @% @7 n: O1 }4 S
  22. #endif
    ! _. w0 L+ c  J7 e
  23. #include "SkinResDef.h"$ j0 ?% G6 V& S0 j  J) w7 R
  24. #include "ChangeBG.h"6 |7 I2 g5 t* \( F, D& i) X
  25. #include "AFXINET.H": h# X9 [8 p0 T; W5 R% K6 ^; e

  26. # ]# p2 D- t) t
  27. #define TRADITIONAL_CHINESE 09 m, J& ]# m) s+ D& b8 I4 v7 r( d
  28. #define SIMPLIFY_CHINESE 1
    0 g( i3 b2 D* {2 ]5 D' F
  29. #define ENGLISH 2
    . N& N% ?3 z# X/ m- h
  30. int m_iLanguage = ENGLISH;
    $ G. N4 v3 X# E* R7 u
  31. /////////////////////////////////////////////////////////////////////////////) v- _$ M7 }. {# w& I+ g% e
  32. // CRevAppApp+ N4 P" v8 Y0 {+ e' \/ d6 [$ e

  33. ; K% Y: I1 C6 j7 Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
      [$ k/ A. P0 h  u2 P( [
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ X6 K5 \" `0 U5 h" A# t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : R6 l+ J" i" d+ `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 F& B( S+ H6 E# {
  38.         //}}AFX_MSG3 x1 {& e4 Y6 {" _9 m. B: X* A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 C" G- ?9 ^9 X* @
  40. END_MESSAGE_MAP()# l. ^* m. E0 k' d
  41. * Q5 |! O& ?  s) _1 r+ i8 N, t
  42. /////////////////////////////////////////////////////////////////////////////$ h! h( T0 l2 p( a; H: m
  43. // CRevAppApp construction1 I; q1 k4 k' g9 M# D

  44. : ]7 H/ p  W' ]) Z$ ]- z
  45. CRevAppApp::CRevAppApp(). u2 a6 }" h- R* v+ q
  46. {! i6 ~: R( D* Q
  47.         // TODO: add construction code here,
    : n0 K  }7 f1 ?2 }
  48.         // Place all significant initialization in InitInstance* b* c9 u) V2 `$ W$ J0 ~
  49.   bDisplayIsBig5=FALSE;5 r! a! ]2 b, ?2 o; f2 Q
  50.   bRestartUpdater=FALSE;
    ; V! A2 G$ C) ~2 o
  51.   bFinishUpdated=FALSE;! W9 n4 [+ {- s' P. l
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : V# [4 @+ x$ B0 c& u
  53.   InitChangeDataBig52GBKS();8 ~( a2 `% F9 g3 P3 t4 G
  54.   InitChangeDataGBKS2Big5();# u1 V. G6 q" \1 s; J
  55.         //
    7 N: c" \# }) ^4 n# l$ b0 d: L
  56.         bClickRunExe = FALSE;
    0 J7 _, e" a) Q  g# `/ V+ f; H
  57.         //
    $ y, G2 B$ Z" G1 r
  58. }
    5 {( t: Z; |$ r& v! X9 C
  59. ( L7 j% e+ r) a1 p" ?4 v
  60. CRevAppApp::~CRevAppApp()
    2 M, {( ~: ^5 M, ^$ ]
  61. {
    6 _. L/ I  q$ L& I4 ?9 x) I
  62.         // TODO: add construction code here,4 G4 b! @7 k& D4 U
  63.         // Place all significant initialization in InitInstance
    2 j. m3 ?6 R; g7 {
  64.   EndChangeData();! X! G6 U6 r8 }  m; r0 ]
  65. }
    * y, x; t+ M  K" R; e2 q

  66. ! t6 N* i4 i1 z- J- U
  67. /////////////////////////////////////////////////////////////////////////////
    * h5 @. ]' W. S) c) y9 @; c  ^
  68. // The one and only CRevAppApp object
    4 V+ W' ^0 |5 N* J

  69. / a0 G! G$ U# Q. c' j
  70. CRevAppApp theApp;' F  O0 C3 P# M! R+ P! g
  71. : L9 }, G, q! U# ~. T. g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' {- ]% S/ p. `% U# _
  73. {
    ) d+ r2 p8 m/ t& F# B  v' o' c
  74.   int iEOF=0;3 O  o  |# }( f
  75.   char szTempName[MAX_PATH];
    ! M1 d- r- l2 n" w' \8 ^4 e) X# i
  76.   *szFileName=0;/ x6 K8 H0 e( G& D1 r
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 x) I. ^- L* A* w0 J: ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # _6 ]0 I" u7 w( h3 z: H
  79.   {7 J5 L7 o. O5 A, q  u4 {$ D4 v' r+ e9 j
  80.     strcpy(szFileName,&szTempName[1]);
    4 r/ d. m: W0 |0 e9 n% t$ |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % g; X7 B* |, \3 `6 \6 w. i- U4 H
  82.     {! {  X6 D1 p2 |9 }0 f; i
  83.       iEOF=fscanf(fp,"%s",szTempName);6 T$ i5 ~8 N7 M: F5 ~* X
  84.       strcat(szFileName," ");5 w7 i+ \! h$ d2 {' \
  85.       strcat(szFileName,szTempName);, u( D% H4 v) h
  86.     }% G. _: n, [" S5 P
  87.     if(strlen(szFileName)>=1)# p3 k, U5 ?; P9 i
  88.     {
    & }4 y# e, B& {2 `
  89.       szFileName[strlen(szFileName)-1]=0;
    - i  E3 {3 R' b1 q
  90.     }# f9 o. Z) n" o, l( N
  91.   }
    : ?5 G  k- {; s) ^
  92.   return szFileName;; X: Q  }3 i5 c. [
  93. }$ `6 `) p. i6 a5 V. K! }, P
  94. 2 V- ]' R+ @* t1 b& b- U/ r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# |; }6 v( D. Y0 K
  96. {
    , \! s1 V1 f+ t
  97.   FILE *fp;: z: w9 O& k( J9 Q" j
  98.   char *key=NULL;
    7 z! [2 T! q  x8 r# m2 I
  99.   char version[MAX_PATH];
    ; j; B1 m) g7 ?0 g  r* [% w
  100.   LPUPDATEFILE file,olds;
    & J/ i) B* Q% l5 z! N6 P8 ~0 Y  x
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      b3 _+ ?2 Z& ]/ K
  102. : o1 x8 L; {$ z& }' {
  103.   UpdateList.clear();; H2 d! i4 H1 E$ t  U
  104.   UpdateFile.clear();
    ; z! v* ^1 E: \$ L2 F! M# h6 q
  105.   if(GetFileAttributes(filename)==-1) return false;' w& Q, ^. F% ^" _9 R
  106.   if(!(fp=fopen(filename,"r"))) return false;; e4 o" o7 ]2 e" i. K
  107.   fscanf(fp,"%s",version);% m' A1 B( c# p7 v+ Y0 H# l/ v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% Z% L5 `1 i( m. D1 H  I1 H
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 k  F" G9 J+ _. l
  110.   {
    5 l! x5 O  f. ?( n5 {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, F5 G  ]  H/ b4 y0 R+ n6 C
  112.     fscanf(fp,"%s",file->path);; ?& V$ D3 {1 `
  113.     ReadFileNames(fp,file->file);  {2 U" \7 H% M
  114.     strcpy(file->full,".");
    + ^/ n2 y1 X/ E) Z: A3 g3 Q
  115.     strcat(file->full,file->path);
    9 g" p" H$ r* l8 o$ i
  116.     strcat(file->full,file->file);* `* F5 m1 I. P* m: O! M% s
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ! |$ w  f# z* M3 l! e' ?
  118.     {
    % _3 d" ]2 `4 N, }1 _
  119.       file->vers=(float)atof(version);% R+ \5 F& f: C9 j) q: @/ e8 p
  120.       UpdateList.push_back(file->full);
    ) o0 h" o3 A) \1 \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ K& x* O' k1 M- \2 ]
  122.     }* b: j+ ]; d" ^9 ?+ Z" b  B) x! M
  123.     else
    , s0 X+ B3 {1 X' m: O# D
  124.     {
    5 g8 A, y# i5 J4 k3 i% ?
  125.       olds=(*p).second;7 Y) r% u4 B2 B. a7 e/ d6 N; r
  126.       if(olds->vers<(float)atof(version))! \  Z7 u0 w$ I1 ]' O, n
  127.       {+ H$ `  m  Y! {/ p
  128.         olds->vers=(float)atof(version);
    # r7 L. b$ W) O" l/ k5 X# [
  129.       }( A. ?% W& o- d( o; O9 ]
  130.       free(file);
    $ X1 Z+ U; p) p9 G
  131.     }& r1 h7 C6 @/ {9 l5 h
  132.   }& [0 T* }8 M6 T* ^; G/ a
  133.   fclose(fp);
    6 u8 v1 x, F! m3 i9 P
  134.   return true;/ U7 S3 ^+ n3 h- i4 q
  135. }1 {2 p- }5 L: f3 {, W& T+ T" V8 U
  136. 2 |/ R( a. I8 q3 s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' j! {" `( g9 `- {; a/ ~
  138. {
    , l) o' u- S; S8 H
  139.   TCHAR  szFull[MAX_PATH];  w4 I- \2 D: F- U5 S$ \
  140.   TCHAR *token,*inter;
    8 n6 W6 M! g" o+ T9 P  J
  141.   *szPath=0;$ H# i( M" B2 s, X4 w$ F
  142.   strcpy(szFull,szFullPath);' G  _, s6 ]7 v( s
  143.   token=strtok(szFull,"\\/");
    . R% _4 l, W% m2 X
  144.   inter=token;
    ' t/ z8 q7 P- L% i. t/ n) m1 q
  145.   while(token=strtok(NULL,"\\/"))
    6 [+ T; l' l* Z
  146.   {  N% ]; ?( S8 F% \
  147.     strcat(szPath,inter);! _  \) M) W( b! z& g! E8 _7 S2 t# o
  148.     strcat(szPath,"\");  Z* d9 E$ O. e
  149.     inter=token;& |/ _, V* `4 D% ~4 _
  150.   }
    * j  T1 Y+ U0 g. O) i1 @# ^
  151.   return strlen(szPath);
    0 r; j: e4 P% L5 \  g2 ?
  152. }% G( |2 F$ L: Z$ Y% ]9 I: y' p4 b
  153. ! w  e/ y" O/ i# w, B+ W$ e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , C+ b1 w# O; j; M+ ^2 T9 u
  155. {
    ( B% q7 y6 H. u" X
  156.   DWORD attrib=GetFileAttributes(Target);
    8 H7 i  G+ Q  v8 l7 e' e3 c5 K
  157.   if(attrib!=-1)( F+ V# a: I- p  V  ?: K2 t( V7 P
  158.   {
    ; D) u* j; d$ P4 J- s
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  B# g- x1 o6 S+ Q3 q' i
  160.     {
    7 v8 A* B% c. H
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ A$ i( e% r/ X( ^2 `
  162.       SetFileAttributes(Target,attrib);
    ! y/ m, X0 E) C$ I2 V
  163.     }+ {& }1 k: b+ {! l
  164.   }# X) q$ x' ?; q3 E& L/ y
  165.   CopyFile(Source,Target,Erase);
    6 C+ ~% C3 {% T8 e6 @" |
  166. }6 H2 R* t4 Q( j' t; ?( I
  167. & Z+ \6 B. _& J4 R% o2 s2 C' K9 b- r; V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' [; m( \" Q' c: S
  169. {! L7 ~' }! ~) w& ^2 H) i
  170.      FILE *fp;
    ; ^) t8 g( t8 x7 H  A
  171.      char  szBuffer[8192];7 B, M" V( o" e  B7 Y2 g1 I
  172.   va_list  argptr;
    9 ^5 `0 o& u* d/ a$ U/ R

  173. 0 }6 @- y+ N* s, o
  174.         va_start(argptr,message);
      V: W9 Y9 P" J" W8 n+ K: A8 P) x
  175.         vsprintf(szBuffer,message,argptr);, w9 v: \4 G3 {7 F+ ]: }
  176.         va_end(argptr);2 x. n6 C  c+ p9 E, b: R( j3 g0 d& c' q
  177.   fp=fopen(FileName,"a");) f) A5 {: Y5 a9 }* u) Y
  178.   if(fp)" G9 o* g: d, l( v. f5 U
  179.   {, i% S5 R' m; C5 M  X" R
  180.     fprintf(fp,szBuffer);
    3 r1 ?$ ^  N3 g0 J6 ~/ x
  181.     fclose(fp);
      C: i* h6 h  @" d( G
  182.           _flushall();) W0 E* _8 W" b1 D6 }
  183.   }
    ' k+ X5 m8 j- L. k6 V
  184. }
    * D5 X! g. Z" ]
  185. & J4 Y# N) B# @6 P& I
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 u( l7 u+ b$ F' Z5 O  ?: E  [
  187. {+ k6 E% T9 N  Z& c( b
  188.      FILE *fp;( b" e1 l3 X4 t
  189.     DWORD  attrib;6 k: e* I; F7 x4 h
  190.   attrib=GetFileAttributes(FileName);
    % x8 Q" w7 u: v1 s* j
  191.   if(attrib!=-1), e# {8 h/ u. y" C$ ^
  192.   {
    0 g5 H+ _2 A  g. l4 `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 ~* _' G) h) q  p
  194.     if(!SetFileAttributes(FileName,attrib))
    7 Q0 d5 u9 {7 ]5 j$ V* C6 `3 E
  195.     {9 k' ]$ v4 H* K: X- X, `
  196.       return FALSE;0 G8 n1 S+ e) l
  197.     }
    + o3 Y9 L) U+ _/ i
  198.   }$ h6 l& S4 G  h3 N& p
  199.   fp=fopen(FileName,"wb");6 O: {) a0 r& V( t8 ~8 v" O
  200.   if(fp)8 b4 r4 `; f: O' e# N& L
  201.   {1 {4 F2 y4 I9 i
  202.     fclose(fp);, y, T) i) V: Z) z
  203.   }% e" `9 w# }$ P7 Z( r
  204.   return TRUE;
    7 [3 i) e6 o+ |
  205. }, H; U/ A3 [5 b
  206. 2 |1 a% s3 U. x4 z% U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 f' c( |4 j& J; W" L
  208. {# u2 f0 z2 o, S7 d9 g/ }
  209.   char filename[MAX_PATH];
    " W# Y# h3 v' p( p
  210.   LPUPDATEFILE file,olds;  K  a2 T) ~7 t2 W1 K
  211.   std::map<int,CString>::iterator i;
    9 m; P- j2 W: r9 l9 t6 k- G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, p3 [+ L6 {5 G5 e$ N
  213.   std::list<CString>::iterator l;
    $ b. H% V" q& i
  214. , \0 u& }0 n6 c7 w
  215.   if(bFirstUpdate)
    ' n6 u9 `7 o' L& c& J" _
  216.   {3 t& ^; J: C7 \
  217.     dwCurrFile=0;( k6 I) q* Y; z$ Q5 K! i9 a
  218.     bFirstUpdate=FALSE;) R" `- L0 a% H# V& x0 R/ X0 o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 l$ C/ b9 z& t  ^4 k3 a6 q
  220.     {
    & t4 k* ~1 P6 m, S& d
  221.       dwTotalFiles=UpdateLocal.size();
    * K, u! E$ h, M2 B
  222.       dwDownLoaded=0;
    8 o% ~9 g8 o; a5 u- c
  223.       bSilentStep=FALSE;$ c/ U, n$ |2 Q- q  D& U' e! j
  224.       bCompressed=TRUE;
    / ~) d; d2 Y7 H* N; z: N
  225.       strExtLocal.Empty();* E, ?, Q  ^7 d8 H' I6 _( d
  226.       strFullName=(*i).second;
    / K( ~9 w5 G5 w% \/ K
  227.       dwProgramState=AP_CONNECT;
      f/ b+ L( z# o, ]
  228.       return TRUE;
    7 F0 I, h# b* ?. m6 r" m* t
  229.     }2 {. {& n+ v4 P4 O! t0 b9 y
  230.   }
    * g3 k9 `8 d* U8 P6 A
  231.   else if(bRestartUpdater==FALSE)5 t& n. ^% N6 \4 a4 [
  232.   {
    ) K8 e" g* @4 R, l$ G! T7 n
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . Z) @! ?  N1 L& w) x
  234.     {
    . Z7 E6 O  c# D6 p4 d' R1 k
  235.       file=(*p).second;
    7 q, U, r% C! I( K- [- t: L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( z0 Z& @# j; \* E
  237.       {
    + n1 f/ d* [0 w4 T. d
  238.         olds=(*p).second;
    * D+ b3 R. e$ s8 V9 Y
  239.         olds->vers=file->vers;
    ) f5 C, v* y0 v* O7 A' z7 O% }
  240.       }
    + A- ~1 k, {. ?( C: [( a- M. Q! g
  241.       else
    2 W0 T$ d' U+ c1 y- `
  242.       {2 C% c2 O1 Z3 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . m" c3 B( R# F% U. [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ x( a; E3 H$ Z6 g& g% B* L+ n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    2 t6 f9 L1 f% D. w
  246.       }1 R5 {$ [0 I+ V- f8 I
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  T# Q+ y( X) I& F% \
  248.       sprintf(filename,"(%s)",file->file);
    0 S2 v& Z  o* B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! O6 t& P/ m; f9 E- g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / G6 \5 o& P' Z$ ~! S( y$ M
  251.     }3 ^/ E: \- N( k% h5 K
  252.     dwCurrFile++;2 Y  R* v$ ]) h  S( L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 l2 V8 ~+ H) Z% v- W5 t% H+ I; c# `
  254.     {
    $ L" F( }! H) |" g9 w
  255.       bSilentStep=FALSE;
    ; b7 }0 Z2 o5 U
  256.       bCompressed=TRUE;
    ' J6 H' T* b1 W. g
  257.       strExtLocal.Empty();6 S9 r' m; k8 F& ?- O1 i- _- w
  258.       strFullName=(*i).second;
    . L- M  `5 U( e" N) }
  259.       dwProgramState=AP_CONNECT;) Q: [6 e. t+ n
  260.       return TRUE;
    " x2 c+ R" n" m6 B+ g
  261.     }
    " @/ j/ I8 R. D2 ?; j
  262.     if(!bRestartUpdater)% M8 g% P, H/ g3 Q  N6 j' T
  263.     {8 H$ t6 X' C7 j# z+ ~* \: ]: T
  264.       int iCurrSize,iFileSize;/ N8 K+ U& C4 b1 A4 @; ?
  265.       iCurrSize=0;: ^& R. N0 q5 f
  266.       iFileSize=UpdateList2.size();3 ^1 a; n1 M5 @- D' k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . T! g6 Q3 J1 e+ ~  {7 g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: }  m8 l, H2 q1 n  Y3 e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & t4 B3 U$ |9 u1 |# n& l! p+ Y2 L" O9 K* R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 I' b* ]. i8 }# s% W, H& L- R
  271.       Fclearf(".\\update.dat");
    3 l" \' a5 X4 q& h( \4 j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & ?! U' v2 b$ _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 ?/ N/ y; k' u  I! p8 ]1 Q
  274.       {
    2 m6 W; g0 f) o& o; u# \- K$ [
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 x; z3 m4 ]9 T% S  A
  276.         {
    / t; z' B# C: y; _; `. @/ F
  277.           file=(*p).second;' d# ~# T- q- X6 g& }, H# z
  278.           sprintf(filename,"(%s)",file->file);
    7 @6 u/ T6 h; f8 D0 N4 s0 K1 G: F& T% n
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 o" ^% f7 \% ^9 W0 V( \3 A5 c' ?9 {
  280.           iCurrSize++;% T& C8 N9 i* N4 e9 _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; @, x0 r: A( Y2 k/ S
  282.         }0 z2 Z1 j$ u# e4 b5 R
  283.       }
    & [/ H, Y' H* J4 Y/ [
  284.       unlink(".\\update.txt");( r3 ]4 D' b5 w5 \  |
  285.       unlink(".\\update.tmp");; L5 o6 c8 {) q# M+ i
  286.       Fclearf(".\\checkversion.dat");
    ) S9 R  i- q  w, k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 [% B+ q( I/ C8 \
  288.       if(UpdateLocal.size())
    / m( M6 i; F5 F* |
  289.       {
    9 N% G' p% \, w# |( K6 I( Q5 k- I- R
  290.         UpdateLocal.clear();
    % L+ R* ]  X1 W* x* e& O4 z
  291.       }
    : k! Q7 a( ]. u4 G  [; r& M( F
  292.       if(UpdateFile3.size())
    & r+ I6 W5 ^2 k' e8 t
  293.       {) c! [$ s8 f+ U3 e" B
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , C& f. _* x4 a. ~
  295.         {
    * k- E2 B3 Q) S0 w3 ~+ j2 c
  296.           file=(*p).second;
    ! w( R2 `8 R0 q+ g1 E
  297.           free(file);
    6 W) n( ~3 [6 ~1 K  N5 Q
  298.         }0 r1 v; P  I) X7 J9 c
  299.         UpdateFile3.clear();4 C' v7 O" x: Z0 Q5 Y8 l; G0 c
  300.         UpdateList3.clear();4 s3 O7 D1 S/ A
  301.       }
    . d$ _2 _: H2 u" {/ R
  302.       if(UpdateFile2.size())3 b( `+ N9 z. L. k/ H( w# m) G
  303.       {
    4 U5 y: b3 m! {2 x* |1 h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( I8 M4 M/ d8 F! a' a2 J, Y% @
  305.         {
    $ T& \8 C0 {. s( z
  306.           file=(*p).second;. }* a- {' z8 ~* c- L5 @! F
  307.           free(file);
    $ V$ n; x* a) X9 X$ h: g8 O7 s
  308.         }
    , Q  y' Y1 e' O1 c
  309.         UpdateFile2.clear();/ j0 B' N5 ^( X$ }
  310.         UpdateList2.clear();
    9 I9 q5 T# H) q# K7 U' ]
  311.       }
    ; }: Q. _9 E9 L% p7 e
  312.       if(UpdateFile1.size())
    # S! B5 O1 y' ?
  313.       {* E0 o& Y( k6 W+ H6 R9 v. H0 y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ m8 B% N7 `5 c9 ]% k
  315.         {
    3 z  Y4 ~7 u) b/ y" y* y
  316.           file=(*p).second;
    * f3 Z' d  Q( a" q
  317.           free(file);
    ( F' M8 t8 Y9 t
  318.         }
    5 n$ ]- I% c' e3 V- v
  319.         UpdateFile1.clear();
    5 F% z$ e: o! L, D. t
  320.         UpdateList1.clear();
    . x/ r8 N5 }" i2 S
  321.       }" m: Y* e, D0 h6 [5 Q. W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 V, ]3 \& ?% ^- W% d  ?* Y; h
  323.     }# B0 _* m# D* r8 J8 u
  324.   }
    8 f) W) X1 B8 A, g2 v% ~
  325.   return FALSE;8 X* M* _# R! r, O1 l+ I8 ^- O
  326. }4 u5 B0 j1 b* Y* r/ m/ [  c

  327. 2 v! C3 r3 e) a# E. J$ ?$ ~
  328. void CRevAppApp::ClearAll(void)* \6 y& |0 @" j: ^4 y* j
  329. {/ S; o. ^# T0 g9 X
  330.   LPUPDATEFILE file;
    - n+ v! ]# @, O: J! b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' \5 j5 S! g4 ^! V
  332. ! D+ p. V2 B: f
  333.   if(UpdateLocal.size())
    . g) H7 f) M8 T" p; }# b' S+ w
  334.   {' i, L! ]7 `4 z; X% a8 m
  335.     UpdateLocal.clear();
      Q+ i& R+ c& d: q0 Z$ v
  336.   }6 B; B5 d) P( W% v. i2 W
  337.   if(UpdateFile3.size())
    7 I& X2 g: Q' f/ V0 h3 Q
  338.   {
      S, G7 c( d4 ~* ]3 ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 x1 i+ _3 P' C! ?' P* c# H
  340.     {
    # R8 ?- w+ q" p+ p1 S  i* C" x: [
  341.       file=(*p).second;& c# M7 T% s( r8 l% }9 R7 j" S( r- N
  342.       free(file);3 a% F9 Q* j4 I' v1 N7 ]) O
  343.     }  {5 K7 n: ?( b0 M0 H
  344.     UpdateFile3.clear();
    6 [2 z- x1 R; V% i3 [& h
  345.     UpdateList3.clear();  M% o' c- S2 P% c# o0 W8 `
  346.   }. E# t( H6 F* b+ M
  347.   if(UpdateFile2.size())
    0 D4 T5 M2 @" m5 }: j% I9 M
  348.   {
    4 X. ]$ C; O! k+ C
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! B% U# I: X% {6 T3 p
  350.     {
    % \6 L4 h0 B' G) m# S
  351.       file=(*p).second;) G# g! p: o% R0 c: L
  352.       free(file);  V: s- ]2 t: R2 B
  353.     }
    4 Z: C. K9 M8 l; _% {9 S9 _
  354.     UpdateFile2.clear();
    . P8 A. Q+ m# [2 e  i6 y
  355.     UpdateList2.clear();
    8 o+ K: B5 `$ [4 l
  356.   }/ c. n, k+ q, |% D: w. g
  357.   if(UpdateFile1.size())
    9 s+ r$ [) U) j2 ]
  358.   {
    & ^- @0 K$ l3 ?  |3 |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ y" R9 s8 i0 Q1 T3 s
  360.     {: C3 A7 `& T  E  e, T$ ]8 f  P
  361.       file=(*p).second;
    , e; D, _5 p2 G
  362.       free(file);3 h/ t+ l; {+ D$ f0 s% C1 t
  363.     }& V' C* S* H/ N3 s  ~. c/ m9 r9 o: L
  364.     UpdateFile1.clear();# N0 Z+ f6 B/ U/ D$ `; v# J
  365.     UpdateList1.clear();) _8 C( S1 F7 J1 T# A, y
  366.   }# s9 H5 ]" u* b7 x2 [
  367. }  - n4 t4 U6 W; s4 ^$ H
  368.   1 y( B7 m6 x  {* u# ]" z" {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 ^% V  g% g' |1 y
  370. {
    5 y+ W1 R: s: J% W; Z9 w( S& _
  371.   int c;! H( C7 R% c' y6 |6 ?+ R  _
  372.   LPUPDATEFILE file1,file2;
    , b* O6 |$ P7 F3 j7 |; b+ N; @  L7 X
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 ]8 T3 L4 O+ q& S8 V. [- Y
  374.   std::list<CString>::iterator l;
    4 M) `, R: H# a  |0 k6 h% ~

  375. ; Q, {  k. W) Y3 a' Z) A
  376.   UpdateLocal.clear();  I' k4 X$ }" }4 o% ]7 m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    9 ^( \3 I* w( O  M/ `3 [
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( B( A3 N3 f5 q" \
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ) W; v( w) S" E* c; A6 u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 a6 A& h  ?; Z# B  s( }/ ]. g/ c
  381.   if(UpdateFile3.size())
    ) }% h* j% T  N9 }+ t* X9 H
  382.   {7 M- I# N( C) n8 M2 {* G3 W" A
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , F3 [2 f. [/ C& Z& f
  384.     {
    3 `& u! [" k% c8 P+ U* L& ]
  385.       file2=(LPUPDATEFILE)(*i).second;7 O2 |' b/ m- j- T7 A2 ^7 j0 O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : y5 c/ A# c* n5 m7 X
  387.       {
    4 E7 E& Y% Z0 h+ p$ n
  388.         file1=(LPUPDATEFILE)(*p).second;: d4 c, U) K# A, Z
  389.         file1->vers=file2->vers;
    " Y  E" D/ |1 J( ]9 f9 F
  390.       }: {% m# a% I) ?# _: [0 h$ P' v- m7 P
  391.       else( H+ n4 W: d- `# N
  392.       {
    7 y! W/ F$ u7 |
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 P5 m+ l# a( ^; ^' O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 a7 {4 L4 E; z# P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% T  g  }& W! U1 G7 R8 Y
  396.       }
    0 \! U4 Y6 ]' t: d5 N0 i& \
  397.     }
    * V" X! h4 o3 K2 o' [' L7 J5 r
  398.   }
    , P1 M$ d. W2 Z5 S$ c! i
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
      X5 J, ^9 K) G+ q! }% f
  400.   {
    " u" f' _/ S0 ^2 I
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ o7 ]; |- _3 @( _. ?
  402.     {
    7 i2 M, s+ C2 F
  403.       file2=(LPUPDATEFILE)(*i).second;
    * C, r5 G' E3 x8 u1 d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 J' n' u: n" _3 r
  405.       {6 l! q: a% J9 a
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( @5 P$ G5 X1 v  X
  407.         if(file1->vers!=file2->vers)7 l$ \2 q9 c3 _; b" m1 e
  408.         {
    " g& p+ D5 S3 q* R3 B0 e! i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( p- e: J/ D' w
  410.           c++;
    % m  K+ ~' c  v3 q' A1 h' c  q
  411.         }
    / W9 f; D. h9 d' \
  412.       }
    - N. R6 K' ]7 w& Y7 G' L5 n6 J
  413.       else& H* ]* \& p8 H* ~' h3 K
  414.       {: X0 [- M9 k* s2 D4 @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 B: Z4 r6 J0 T; s: K* l
  416.         c++;& ~, c" a* y! n3 ^# K) {
  417.       }
    ; N* [( Z; D+ [0 a& i
  418.     }$ r5 `+ T8 _+ L# `3 d- u
  419.   }
    - x8 a6 c$ W. Z& w/ z) @  R
  420.   unlink(".\\DownLoad\\update.txt");
    4 [& c" d9 r3 E: x8 b8 `
  421.   if(UpdateLocal.size()) return TRUE;
    + U( l$ c5 F& ^! x
  422.   else                   return FALSE;) k- x5 s: |1 d: a. H8 t
  423. }
    1 y0 F/ G' J4 d+ \( O6 c: @
  424. 0 h8 V+ w; \( D! w' q# r% t/ W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    & h+ m# d* @5 A0 M8 H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"+ s# Y7 d( [- o  M. L

  427. ( I8 B4 [8 A$ X7 x4 ~/ I

  428. 4 k  M8 T% `. \3 H8 `3 r

  429. + }9 [! O, L) E! U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; X, q7 e! Z2 ]2 L) F: H4 M
  431. {
    ; M. L: @- k. o: _3 x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( |, C: R' {' }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 w; m5 R0 W) r' P- G) D$ M
  434.   {* m, N- B4 R- ^) h3 w  E6 J
  435.     char szLanguage[50];
    $ S3 V& T5 a& ]9 O/ ^0 F5 W' ^6 Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . t* }) O5 t, L2 P/ _: q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 y$ a0 E% {9 r% S  _% U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& R: N0 \1 t( `& C) M$ }2 g1 @
  439.     else                                   m_iLanguage=ENGLISH;! T: ~" q9 e0 S, c/ ?
  440.     char szRegister[100];
    # [) o0 K  n1 z3 s6 w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      ?, x% g( K  ]& b; p: _" `
  442.     strRegsName=szRegister;* [4 J& ?9 I. H4 D
  443.     char szPatchURL[100];
    " b3 n, U. a) M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 @: ^* E0 W( J' L( A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      M# ?6 J+ G: D' y+ K# Y$ j
  446.   }* {% [7 j: P3 t! t- w5 _9 Q- A( W3 q
  447.   else3 F  M+ O$ z% a/ l
  448.   {
    " E$ H. t7 B4 x" a$ p+ U* r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, y$ N7 h  i* q* n8 j# c! i, @9 A6 o
  450.     strRegsName=DEFAULT_REG_URL;& Q* U0 _/ @. B5 r1 e7 G# e
  451.   }+ O7 s% a! |6 @+ S6 S" ?2 ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)' J& r8 {8 W; W3 _/ D3 z
  453.   {
    6 G; k$ q# y8 }" j
  454.     char szIP[50];$ e$ D/ u. L% q, A* B
  455.     char szDIR[300];
    & b9 i2 Y$ o/ e! p( j2 b, a$ _9 V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  `* A0 l/ _/ J; w/ h9 H
  457.     {1 H( Z" T/ ]  I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; V; C4 F, x/ k* d& q3 R- K
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! v0 ~; l+ \, p/ U) {" d2 f
  460.       strHostName=szIP;
    % p& t+ C! f+ e& i0 _, e. a7 t
  461.       strHostPath.Format("/%s",szDIR);) W6 _3 T8 Q. l, I# B; l; q6 ^
  462.     }. P* v; f+ ~5 J$ Q
  463.     else+ `# b- C4 L- @2 U/ {) ~$ v3 }
  464.     {$ n1 y1 P, Y# ]9 X/ b
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& m$ e0 A9 ]) L; E" d
  466.       {
    1 F! f" Z+ Z3 a2 N, k2 J5 Y! d: v7 q
  467.         char szLanguage[50];
    . m% T# O8 c% }  S/ Z( ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      {& |* m3 l5 k# Z; b
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 L( i& p' }7 ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / T/ @. l8 |) H0 Z4 R
  471.         else                                   m_iLanguage=ENGLISH;; t2 ~2 b" H* n: |7 [
  472.         char szRegister[100];9 D+ w, L8 D# g0 \. f: {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 r) l* ~5 f- I2 K9 d* y
  474.         strRegsName=szRegister;
    # U) T. E1 E- X8 w. ^
  475.         char szPatchURL[100];8 h$ F$ [8 a9 ~: V3 b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - J3 q: Q  r1 b
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      x  o0 ^" V5 s8 V4 b% k1 r
  478.       }
    , w0 l; \" B- g" o8 I/ [4 s& h) l
  479.       else
    2 F" U2 r# k3 p; V5 G
  480.       {
      K# D9 t- _8 r# `; q2 @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * n) w' g4 L- o+ \
  482.         strRegsName=DEFAULT_REG_URL;( l; Z# m* p% z" R& _  N* x
  483.       }! l9 i6 i2 ]4 b' P* J" ?  U& f: |
  484.     }
    ' l9 y; H' s5 a* A+ P, D
  485.   }+ @& e3 G2 R( g1 i/ G5 ]
  486.   return true;3 a7 M; C2 O# ]. X) O
  487. }* y5 P* G' w2 a
  488. 2 P9 L3 Y4 J  c# H" t  l1 a" z( I
  489. #include ".\ZLib\unzip.h"
    # m3 z  Y) y2 h- ~! ^8 |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 D% q$ Q. n$ _" d7 V: c+ g
  491. /////////////////////////////////////////////////////////////////////////////; q6 f4 \" ?# k( {
  492. // CRevAppApp initialization
    - e0 ?* B1 y) M$ L; k; B) z, q

  493. + U$ g; P$ ~- k; y
  494. BOOL CRevAppApp::InitInstance()" C$ x' [* ]6 j7 V
  495. {
    1 X8 O0 L7 F9 ?6 Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; t9 g6 U9 ~) C2 w
  497. # ~5 w. P# B- D- w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " O% X  b% k  I
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % W! P$ {3 D9 }5 {
  500.   {
    , P/ ?" j3 K2 O' B( q+ O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' S& \$ f+ {4 i8 d' v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);- M3 Y: O0 E$ U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 D: |$ \3 T8 m1 z8 u5 v* \
  504.     {
    , K+ ^3 a1 G2 @" z! c+ l  c. _* e
  505.       strcpy(szPath,szPathTarget);
    . K. A1 y3 O3 @/ j( n
  506.       SetCurrentDirectory(szPath);
    % n% L5 `) Z, e: u1 ]" _6 E7 }
  507.     }
    8 r( v' u3 I6 f+ _
  508.   }9 Z. y% y0 R6 l3 Q
  509. #ifdef _DEBUG" @- P) D* t2 M1 }3 U$ i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 b$ X  D. T$ R! T/ U) M
  511. #else# I; g# _* M0 w" N8 `) `& s  X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " ?' _: C( j& l" {/ m6 {
  513. #endif
    ; H5 M" m  {% P) N6 Z
  514.   {
    . b: F4 h" `) J, I/ c. x
  515.     char tempFileName[MAX_PATH];9 s! r5 \; ~" i8 d0 i+ |& _/ p
  516.     strcpy(tempFileName,szPathSource);
      ]' o( Y) p9 S" z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( L1 J. G( D* n) |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) [0 b2 f5 A5 K# L- F# o
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, m) V' C% l% \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);9 g8 l5 m) a4 r- ^# Y0 V5 k
  521.     return TRUE;& }. \0 k# U  V$ f9 T" C3 f3 G
  522.   }
    9 c+ o# L% _+ Y/ i
  523.   // Nuke 0118: Delete run.exe
    / b4 c9 h2 r3 B+ h! @9 l2 `6 U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% _, N2 }& z* W) ^# `  M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . _! N$ Z  h$ R
  526.   if(!ReadCfgFile("Config.ini"))7 g' Y6 E% h# u' H4 ^& R  F3 t# H
  527.   {+ w. K: Q* V$ C# Z5 T2 K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, h: s) C$ B, D/ ]
  529.     return TRUE;# c5 |+ D" `, y& l* D+ Z
  530.   }- ?( O- L, T$ P! O/ M/ c& R1 ]
  531.   HANDLE mutex;
    5 {2 ~, f$ |8 D, ~1 r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ Z+ N! i. c$ v, a* _
  533.   {0 h" y- N# q. D. @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): h& K5 K* B& ^, Y; P" f, k
  535.     {
      x+ t: @& V4 E0 ]; A
  536.       CloseHandle(mutex);
    * e0 G: H4 j! U! ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    9 l: R; }. L2 z8 u3 T/ A0 y- y% b
  538.       return TRUE;
    6 s3 ^4 W- L+ X
  539.     }
    1 J2 H2 C; C, ~: B9 x  F
  540.   }  " w+ Z; E8 y  ]2 i
  541.   CloseHandle(mutex);  g2 L3 ^2 G6 c7 |0 `) e+ b
  542. 1 u; j0 X5 O0 |; _8 _: P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 n6 D" {4 M# m) N" T6 W
  544. # D+ c5 g) s; O, Q# @
  545.         AfxEnableControlContainer();2 u) C: L) V! }, N7 {# Z

  546. 0 V5 P+ m9 }5 I$ K: ~
  547.   bCanUpdate=FALSE;
    , z% q! s. I: f$ R. G% Z; q4 l4 {$ C
  548.   dwStartUpSteps=1;4 B3 ]6 P3 i* ?, P2 g
  549.   dwProgramState=AP_NOTHING;  p9 p0 t/ R( @% [/ M! O

  550. , U1 f- ?  X; g% |7 v; |1 O" ~: m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' h5 F4 a4 ]2 O  {( C( U
  552. ) @& X! Z( R+ h) b0 @
  553.         // Standard initialization+ h8 T! x$ ~1 o, ?- D
  554.         // If you are not using these features and wish to reduce the size
    6 e& v$ e/ M7 d9 O& b2 Z0 i: f
  555.         //  of your final executable, you should remove from the following
    $ ?7 i  i( \( ~) b7 `
  556.         //  the specific initialization routines you do not need.% u! U# T- t  E9 m+ v
  557. # Y! Q# C3 V/ V% b1 E2 H) W) `
  558. #ifdef _AFXDLL
    9 [& I# m& {, F
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 g" n; U: b7 `. u" Y
  560. #else' t7 X! E/ ]$ l: Y+ W0 W( t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 h1 O  b; Y! A( ^- w
  562. #endif
    * _) ?/ P! `" y
  563. : ^% _6 i& }0 x
  564.   dlg=new CRevAppDlg;
      O1 d) o: a5 L: ?+ a
  565.   dlg->Create(IDD_REVAPP_DIALOG);# |2 A' E" t. i' L2 d/ r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 Z# M( \3 D. X" G# f
  567.   m_pMainWnd=dlg;
      z- o) O4 D3 [7 L' r& a& l
  568. . ~- y- M+ H) u% w$ H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    6 v  m) E6 K, |+ p9 S

  570. 2 {1 G1 N0 V0 {& p' P$ b+ Y: R" ^, r
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 X+ B1 V' L5 d* z
  572. //  ULONG_PTR gdiplusToken;7 L5 ~% }2 m6 O! Y) |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 T  Z& x5 x( K+ B: J" M

  574. ; C# v6 T2 q: a; [. W% c
  575. //        CRevAppDlg dlg;
      C9 R" ]) ]  K, d5 F
  576. //        int nResponse = dlg.DoModal();
    3 e, c$ Z- G; g+ R% A; r# S
  577. //        if (nResponse == IDOK)# Q+ U7 P1 Q% H: Y
  578. //        {
    3 W3 N9 J; x, b5 ~# l2 b6 ]
  579. //                // TODO: Place code here to handle when the dialog is) r0 s8 D& A& N
  580. //                //  dismissed with OK
    8 ~0 D& j4 @% `4 Z
  581. //        }
      M6 m, }- w; b
  582. //        else if (nResponse == IDCANCEL)% H6 y! i$ g" l3 G5 v) y) _! ]
  583. //        {
    6 L; S3 T5 P- o* D3 w& V
  584. //                // TODO: Place code here to handle when the dialog is0 V3 ^" U  g) n) w' S$ }/ S
  585. //                //  dismissed with Cancel
    8 h) @+ U* A& r7 C; S1 U
  586. //        }! N* U& b$ ?; `/ F$ |- u4 T
  587. ( g, E# M4 y. N1 {; r, V" b
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 I0 \9 l. `0 c; r1 r, z) p
  589.         //  application, rather than start the application's message pump.3 z$ V8 h: d( B! ^8 C/ @2 u
  590.         return TRUE;
    $ o# r/ R3 }2 g# e
  591. }- v& G7 O! |0 d$ Z& S
  592. ! m! u# P2 c, ]+ N* D8 W
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' }9 |, p4 _$ n2 ?
  594. {
    $ X/ _" B6 B* w
  595.   int i;
    6 |( u  Q( `0 o
  596.   char *szRet;
    ! `: g8 @0 Q# R( `

  597. , _  s3 F* Q3 p: }
  598.   if(pSource) { itoken=0; sztoken=pSource; }7 K- J1 @3 y- Y2 t: A
  599.   if(sztoken)
    ! K  _+ e, r( y. @. F( ~, O7 L
  600.   {( T* H- Z4 u) n+ I" ~. F
  601.     szRet=&sztoken[itoken];5 T4 v/ y$ V, T2 `: F) K
  602.     while(sztoken[itoken])
      n; |4 A3 Q9 a  y
  603.     {9 w1 j, b& d/ w+ t
  604.       for(i=0;i<(int)strlen(token);i++)
    + f/ y; Y* U/ |' v
  605.       {
    # w& X! G) D' X! s2 A* r* O& U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * |& [/ T- r9 n7 u* ^2 G
  607.         {, l! ?5 [7 V, b! G/ u5 c/ {
  608.           sztoken[itoken++]=0;
    3 r* W) s  Z9 ]; Q7 t$ ]2 o
  609.           sztoken[itoken++]=0;: |& F0 I( E+ W9 y. c/ L
  610.           return szRet;
    ! J* }8 d4 P* A5 p) q6 a, g
  611.         }
    4 T( G9 \, P; G9 P
  612.       }
    6 z6 F. k# _: ?+ o% T: Z0 y
  613.       itoken++;
    ! z  Y2 ~6 i( |) Q
  614.     }
    * M* i$ F2 z' u
  615.   }# U& m+ p" R# F* G
  616.   return NULL;! F5 w( S' [5 i0 a
  617. }
    / C: I3 T2 q" N5 I- n7 }! H- V3 v
  618. $ U2 \! ?" v4 @: H0 Z9 N
  619. void ProcessProc(long Total,long Current)" f. h3 k5 A! s2 f
  620. {
    + t6 k! p6 M$ T  C
  621.         MSG msg;
    ' {0 F! H' N, G
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);4 ]# v9 U% X. X1 q" J, ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" C# o3 z9 X6 Z: s, Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; W3 o6 j- N- \' ]
  625.         {
    . E/ z' H' H/ \. K( k2 t2 {
  626.                 if(!GetMessage(&msg,NULL,0,0))) }5 `; U9 }) M8 |4 ?* U# \; F* U
  627.                 {
    / Y+ a$ ?  ]* r, Y
  628.                         return;/ a9 w2 K' `, F6 h( y2 s2 v( {
  629.                 }
    . p& y* @9 q0 u9 D
  630.                 TranslateMessage(&msg);
    9 W; P/ x7 ?5 ~9 }# b# ^1 u+ J# O3 f
  631.                 DispatchMessage(&msg);
    / v5 @" H9 s/ Q/ I* p! w
  632.         }       
    0 u& K5 n9 M% A4 h+ b& T
  633. }% O% r) |, N& d  l" I4 a
  634. 5 K. Y3 i' W8 d& E* G
  635. BOOL bFirstChar=TRUE;$ d. ?6 {6 p- h; B1 H  j0 B

  636. * }# }' W! U0 w  p: S, S$ c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 S5 x9 R* ]: U. [& c9 \
  638. {( s2 N, s+ o& {. y
  639.         // TODO: Add your specialized code here and/or call the base class! l1 n) i4 t, \5 X/ {4 U
  640.   switch(dwProgramState): T2 U% [# e* {3 u' x" w  I
  641.   {* A  f. s5 v5 \1 k( m- L5 ?
  642.   case AP_NOTHING:! s9 ]6 o* O3 h$ I" i9 J. `7 N+ b& }
  643.     switch(dwStartUpSteps)
    * ^$ t  p0 O4 T4 g) x) s5 Y
  644.     {
    8 k& I( i: o, |4 }
  645.     case 1:- V5 h- Z* V% J0 B- ?6 a' V3 D! f
  646.       {
    3 j& D% T& V- h/ e& w; P
  647.         int i;+ M9 ^2 ~- V6 {8 |7 R' N+ ?% }' x
  648.         CDC *pCDC=dlg->GetDC();5 m- g" f6 D+ Y# `9 L: V
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 K: z$ D" O$ m
  650. //        Graphics graphics(hdcwnd);
    % O7 g5 C0 Y! T# A5 _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 S  v3 Q$ D$ v( O/ @% r, E1 ~
  652. //        INT iWidth=bitmap.GetWidth();, W' y4 ]3 E# a) A& X; \
  653. //        INT iHeight=bitmap.GetHeight();  }0 P$ S4 u: H& O
  654. //        Color color,colorTemp;: |: p; C/ I' R: j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! z% q1 V& z) G5 X0 _2 @9 p
  656. //        {
    : |' k8 @4 M2 E  V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    8 M% C/ S' n" G, Q
  658. //          {
    ; N. v# x( D( ?: |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  K& {4 R2 K* C( x
  660. //            colorTemp.SetValue(color.MakeARGB(  @7 Y7 Z- |( S$ Y2 `/ Z  a
  661. //              (BYTE)(255*iColumn/iWidth),* C/ I7 z" E: |1 M
  662. //              color.GetRed(),/ B: `% o# S) T1 L! O& v% Q
  663. //              color.GetGreen(),
    $ ~5 B( I/ Z7 m; d
  664. //              color.GetBlue()));7 h2 M+ \7 p3 u; ]; p
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);2 C7 L# r7 l. L( n
  666. //          }- ?8 v: |: r' _6 Q0 I8 ]6 j3 ~6 V  R/ H5 S2 X
  667. //        }
    " C4 `# M1 x. n
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 h0 a5 x3 _+ J( m2 {) z* N4 y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 J* U) M) j; m  g' ^
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 V; Q5 H5 O: J  J; G1 J+ u; E
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ o! H5 U" }# }  W
  672.         for(i=0;i<240;i+=8)
    / \! p6 ~" a# [
  673.         {) h4 u: G7 L% b( _: D& d+ z1 j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " h: t- {9 e! R* h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 H; e8 G5 w3 W  ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ @+ M3 Y" u# N  B
  677.           Sleep(33);3 [4 V$ n' f/ c0 G, V% V
  678.         }
    6 q. r$ M$ ]" Z$ j, Y% s( ~
  679.         Sleep(1000);
    9 W( p! J. R: u) r- w; p4 w
  680.         for(i=240;i>0;i-=8)* R" w) q4 L" e1 A  R( H$ d; Y
  681.         {5 z6 f+ f" s8 f; C8 G
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! v) b& V5 W: t' S& H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) F& Z2 s8 w& W( q- w; i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : b; R7 O) J& y8 z! ]
  685.           Sleep(33);0 k% {1 Y  N+ m, c3 V2 B4 W# I
  686.         }
    7 H7 B/ F6 b1 p; Q" O! ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) s' ]( H3 e9 X: t2 e1 i
  688.         dlg->ReleaseDC(pCDC);
    4 }, N3 `/ f/ d% ?
  689.         DeleteDC(hdctar);* w) X8 i- Y( J% W
  690.         DeleteDC(hdcsrc);
    - @' w/ C+ q4 ?# U& G! f& @( \. S
  691.         DeleteDC(hdcorg);- X9 b/ ?1 ?. u( o1 d
  692.       }& b  z% B# P2 `1 e. l: t- g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 ^  M/ z7 t* S/ G6 ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # ]& B0 m. u& ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! S& p9 C( ?- J) Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ D: K  E6 n8 D$ s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' Z% Z- L% `, O/ O
  698.       if(!Dn.Connected())
    $ @9 S# K( r) ]
  699.       {
    ' x: H, c0 O! |9 v/ f  S4 X
  700.         dwTotalFiles=1;( Y+ I; }( d+ i3 x) \4 m
  701.         dwDownLoaded=0;; O; F% _+ R6 v/ U) A) r
  702.         bSilentStep=TRUE;
    $ y, q( q* c: |8 K4 b4 u: [; e
  703.         bCompressed=FALSE;
    : a* c# Y; A  x* b/ G. p8 m
  704.         strExtLocal.Empty();, A6 c- q% ^( f  f$ |9 ?9 D* {
  705.         strFullName="readme.txt";$ G! O6 M" p/ T- S! f# i# c
  706.         dwProgramState=AP_CONNECT;
    / R$ r: s3 b0 B- ]% F! J8 v% J- u
  707.       }
    4 b: C$ I  w1 R% q: F7 e' v0 [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; y' V0 |9 d9 p6 A
  709.       dwStartUpSteps=2;; V  A* o; i* e) z! t. Q
  710.       break;2 K0 c" B7 q: M6 Y7 Q; M- a; n5 u, s
  711.     case 2:
    $ f& S# O# B+ l5 {+ ?7 a( L; w
  712.       {1 v7 v. J0 a1 N/ H$ I/ i
  713.         int iEOF;" e1 N3 Z1 l( k& s6 z3 o
  714.         FILE *fp;0 B, {  w# [2 z2 n. |; P
  715.         char szString[512];
    ( T8 ]# N1 {, `; j6 O, D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * N' o4 f5 \( Z0 {# A* c( V
  717.         if(fp)
    " }- v" f; u: \& X8 Z
  718.         {# S8 x1 ]* X0 J( V
  719.           do
    . x& A( B: j4 L) c
  720.           {
    $ }4 i- h6 [' Y+ _* r
  721.             iEOF=fscanf(fp,"%s",szString);
      @- i; P! p$ m+ H6 R+ f1 j
  722.             if(strlen(szString))0 s7 c  I$ e' V
  723.             {+ }# ?+ M5 p% u( N
  724.               if(bFirstChar)
    ! s8 B- B* A+ f. r
  725.               {
    ' h( z5 Y5 m0 C% ?9 {
  726.                 bFirstChar=FALSE;
    # Z/ Q% S5 Z: `' A- F' m
  727.                 bConnectIsBig5=FALSE;
    : X% X* K: K6 N3 u0 y- m
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! V+ o6 g' ]4 ^7 M; r+ F
  729.               }1 A" }4 |- g1 z1 I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 {  c6 J" O+ q( ?$ [6 `3 }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 U+ l  ~6 Y. n; _! C
  732.               dlg->m_ListText.AddString(szString);
    , z4 z7 l% A7 V5 ]# z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 r8 h3 e% V" B  S
  734.               *szString=0;
    " Z1 |# [0 y: f
  735.             }/ z  g. h  t6 O8 \4 z( T' \( n
  736.           } while(iEOF!=EOF);2 S5 {/ ^5 O) c+ t4 R
  737.           fclose(fp);
    2 j' f6 _9 b7 X3 Q; \' {
  738.           unlink(".\\DownLoad\\readme.txt");- E7 c; O& D7 V, b
  739.           dwStartUpSteps=3;$ Y* K  s; A; Z  A( H, v6 @
  740.         }
    . w$ X+ l, W6 \) K" {- ]
  741.       }  h. s7 n( b, k! l
  742.       break;
    9 }; Y$ d% ?6 j( M( H, X
  743.     case 3:! W2 T3 M$ t+ h' R* I
  744.       if(!Dn.Connected())0 u, ]3 C+ k% {4 b3 P# i
  745.       {
    3 _; [% _$ I$ q; d3 c5 `& @7 [% }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      d! p5 M# R; L8 w8 c
  747.         dwTotalFiles=1;
    2 {, n2 H% K% R- F* f8 ^2 C  S' u% `
  748.         dwDownLoaded=0;/ ^( T: x& n7 u9 C
  749.         bSilentStep=TRUE;
    4 |/ {" a) c! _8 k- ?
  750.         bCompressed=FALSE;
    9 V8 c4 z/ J  k- s2 p
  751.         strExtLocal.Empty();5 ^  m* r1 Y; J2 z% ]/ f7 {
  752.         strFullName="checkversion.txt";
    3 C, W* \2 i. b. R' ^: Y
  753.         dwProgramState=AP_CONNECT;
    3 a! a% q$ ^- U3 m
  754.       }
    % O$ `( m& j* F" T  J  y, x5 D3 [/ X" u
  755.       dwStartUpSteps=4;/ v# D) w  y! f* R. S  F9 H5 P
  756.       break;* t* C% P& m9 G& q! }
  757.     case 4:. Q: z, ?2 ^$ V3 ?
  758.       {
    % Q( ]4 A$ S% c) E! ~
  759.         FILE *fp;2 Z/ C9 ?7 P- C
  760.         char szString1[128];
    ' ]( Q  M' D8 u& A: C! ~6 ]
  761.         char szString2[128];6 o) q- i% p$ y, U' |" c
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. e0 q( b" T- ]4 C9 R; _# N
  763.         if(fp)2 h6 I( @1 T& _9 V" W
  764.         {, A: h4 v. A$ J$ X! n0 T1 x0 y
  765.           fscanf(fp,"%s",szString1);
    + Q- G7 e& ~# H
  766.           fclose(fp);/ c2 D+ t* b) s! E* u
  767.           fCheckVersion=atof(szString1);
    4 z8 G5 k/ i0 e. o
  768.           fp=fopen(".\\checkversion.dat","r");6 F3 E6 a$ y$ `$ r6 ?7 I% T, o
  769.           if(fp)+ o6 O: v% p# f( j8 x2 t
  770.           {
    0 o" X" h" g9 Y% x) z" r
  771.             fscanf(fp,"%s",szString2);
    0 S, T" G" @& b8 g* P+ J* \4 T% I
  772.             fclose(fp);
    4 u% b! c, `2 |* k3 \
  773.             if(atof(szString1)!=atof(szString2))0 s7 x: q  D' u, R! n  A+ |- B
  774.             {; P& u( K. Q4 Q2 w
  775.               if(!Dn.Connected())
    / r) Y, V: N# {) X. }( h5 \
  776.               {
    1 T+ j8 z2 I) ]6 Q; R
  777.                 bFirstUpdate=TRUE;
      e& x7 ^. V3 E9 r2 ^
  778.                 dwTotalFiles=1;- Z+ s9 F6 I; l1 {3 z/ d
  779.                 dwDownLoaded=0;
    & x% N1 }! R! b- b' o
  780.                 bSilentStep=FALSE;
    3 Y% R8 `1 n# ^) @  q
  781.                 bCompressed=TRUE;
    3 {+ Y5 i! H2 }2 t+ @
  782.                 strExtLocal=".\\DownLoad\";
    " s% ~) n& o2 ^& o7 @6 A; f* q
  783.                 strFullName="update.txt";
    + o) |; y& v' y! a9 k
  784.                 dwProgramState=AP_CONNECT;
    - m6 Z  |1 q  k+ \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& L- p$ J  y: E) K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' z. H! r; X6 u" G- @& H9 L1 Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " c/ l7 n  J$ r5 v0 z" t3 o

  788. ! P- p3 }; W1 I% @3 E* n1 O
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 \9 R- P5 i( @- Z3 y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    8 S/ _, @$ `& o$ S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)6 r+ Y. D; {/ e' x3 @* \
  792.                 {
    : e+ Z& y1 ^5 K( _% z) P2 n( o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    + r" |. {5 f  @
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 _. X( P: R) W* K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ( u" ?2 t- g( z3 l9 H
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# R2 t: T0 a; n! P" Q$ J4 u5 `# T9 O8 ?
  797. ; `6 e  a1 y4 e* h1 G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( E4 N$ S1 E6 a. d4 \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  u# ?. M! T7 H; h2 L2 {2 \  i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    & ^/ {/ z! M/ G3 q1 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: i8 u+ B. h0 o2 P) b0 z
  802.                 }
    1 e# ]( p) c/ j6 m* \
  803.                 dwStartUpSteps=5;
    ) J6 l5 {& U3 ~: [
  804.               }
    3 \, Z5 U; I1 {: h. L# s
  805.             }
    $ A7 F: U& r6 k0 d
  806.             else
    $ `' w" q* f. [* i
  807.             {
    % L  Y/ l) @3 F# p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 g- f9 l- o- N: X2 z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 `, `2 E6 B7 a' b& r8 Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 S4 [5 }# @) }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 G9 ?. Y' r) t4 s0 D
  812. ) ?5 d6 \* ]. _/ A  S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( o# y8 t, |3 O( ?2 r  ?: X7 D
  814.               dwStartUpSteps=99;
    1 P. c) u$ c8 O$ V. k/ u
  815.               bFinishUpdated=TRUE;% O' |* R& W0 y: [
  816.               bCanUpdate=TRUE;
    ( @. i' N$ E- D+ |+ v" B
  817.             }
    ; t, f! c/ B- Q1 B" {( W" K6 O
  818.           }
    6 H) k# f7 w) S# s3 X
  819.           else7 }- u) n: t- e: L. \* X" }8 i
  820.           {) w, ?' E2 W' I$ }' d* F* p
  821.             if(!Dn.Connected())% o% u: H( G" j
  822.             {9 Q, _9 l/ D, @
  823.               bFirstUpdate=TRUE;
    4 K4 l7 c8 {3 ]/ S0 E% g6 y
  824.               dwTotalFiles=1;. Z1 b6 J6 x- s5 _
  825.               dwDownLoaded=0;9 L9 [3 I2 F: O9 e/ Z
  826.               bSilentStep=FALSE;! t: E; r4 _1 I+ {1 G! C! h
  827.               bCompressed=TRUE;
    7 q7 b5 n% A4 S
  828.               strExtLocal=".\\DownLoad\";
    . P0 H! f8 V% {
  829.               strFullName="update.txt";( i$ q1 ^% u% ~; S
  830.               dwProgramState=AP_CONNECT;
    3 O& Z' F+ S0 g
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' y7 u' [: c  j& L; H
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 `# n2 l# l- u0 b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 K' E) O, p0 r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      \# F3 X. J2 W/ @, F
  835.               unlink(".\\DownLoad\\checkversion.txt");8 \6 |0 a0 T1 r5 f0 @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1), @( N: F$ d4 C9 _  c5 T
  837.               {
    ' F1 `* e* q. ~  `3 J& t
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");* j; N, t; t  {' ?: a( t
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");1 F5 r" a6 N9 ^5 h3 H) f9 ^  U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 @: o- T) ]; d. |: ?3 q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 _0 X1 z9 O  [( K! l7 V
  842.                 4 J; t3 q. M. Q) ?; u7 `6 `" Q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 E; S. m  J! z8 U0 ]; `2 W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" }4 n, G3 F5 R0 A2 G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");! C7 U0 m6 I& ^. s' ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 a9 {6 y! I9 P& a
  847.               }
    . i& U6 R6 M1 B2 ~8 \. {" Q
  848.               dwStartUpSteps=5;
    ' Y+ `- j) p( d4 w/ O
  849.             }
    $ S' J4 Z1 C+ N
  850.           }4 t. C  \. d6 i& |
  851.         }
    ( I/ k! B2 z* D: ]9 O
  852.         else
    : d  G7 a$ u  r. x6 h" L
  853.         {; Z. b$ j& E0 y: @
  854.           dwStartUpSteps=3;, @4 B* X- H0 T$ A0 w
  855.         }
    # h9 g0 o9 ^7 D2 F4 x! ~. ?
  856.       }, ~3 _- F4 b: M) ]8 w. z4 A3 G( a/ ]
  857.       break;1 V0 w# T2 U2 `0 l  a! Y" G
  858.     case 5:
    3 v8 h  ]7 \! t9 k: X
  859.       {
      F- z* Y( n  r' a8 Z, T
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( @  _- e$ F7 ~' `4 w8 }
  861.         {( b4 E5 y5 m8 K. i( g9 h
  862.           int opt_overwrite=1;
    + B7 F7 ~" k' o
  863.           int opt_do_extract_withoutpath=0;( G& ?3 E4 S. w( ?, s
  864.           unzFile uf=NULL;
    0 c4 t% d6 }- X
  865. ! P' t$ C+ g! [" O% A6 K
  866.           uf=unzOpen("Wsa.zip");( d/ V; F  `/ F8 I* O6 t
  867.           if(uf)  M/ s" |4 A# R) \, O. ~3 F
  868.           {
    7 U+ i/ R: B+ M7 D
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);, x( _: h8 z2 N) \  ~- |
  870.             unzClose(uf);$ N! R7 y+ A; `5 ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    " @* t9 u3 V0 N# x( F" U8 P+ n
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 Z0 B+ P9 y( n* t' L) ]: |$ ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- ?9 H- M. |, d" D; Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: r! q5 r' v* i/ A5 ]( G  ^& A4 {
  875.           }1 h* a1 B8 _$ r, A& G7 D" U
  876.           DeleteFile("Wsa.zip" );
    ) Z2 e9 T* F& \' `
  877.         }, G  i; g+ G/ i  Y

  878. 5 o, U3 I9 s/ i' u* j1 |9 s
  879.         if(CheckLocalVersion())  A4 y, P* u( g  \3 y- c& O! e$ \1 Y
  880.         {" K& E: e4 v+ o7 W1 M' ^: ~
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");# n/ @* ?' z5 Z3 J1 I' ^2 f
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    8 d6 ]6 k1 G8 o1 Q% E: Q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");1 C% n- x( B& r! U/ q- t6 t" j
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - I1 T! \" A! Q. u2 x+ V, J$ U# V6 |
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);$ _4 U2 E  B: j5 R% K" r
  886.           dwStartUpSteps=99;
    / x4 r" Z4 h8 C' x5 ]
  887.         }
    . d, Y( Z) V: P/ r
  888.         else1 e% V% I+ g! K* o" |
  889.         {( k$ m. ]) I3 W# x- s$ t9 L- A
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  g" I4 t, m/ u7 |; Y8 `* Y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; R% w5 c+ I- c2 }/ q7 u
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 \' q+ A! ?5 n$ S5 k: }+ ]" }

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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