CSUpdate.exe源代码

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

* X& e+ |3 \0 I
  1. / RevApp.cpp : Defines the class behaviors for the application.: c( c' j6 L. Y" p, r( [2 C
  2. //0 d& u; I0 n+ p& f+ a* |
  3. $ f, k: c6 b2 h1 I: G1 H. ^3 R4 s
  4. #include "stdafx.h"# X( u- ~) t( g$ W

  5. & _0 y5 n- A3 e7 [5 x; D0 x/ g
  6. //#define UNICODE
    3 r3 ]( p+ a8 v1 ]
  7. //#include <gdiplus.h>
    + g7 [- h& X" Y- U9 ~0 a0 V' x
  8. //using namespace Gdiplus;
    9 i- u- l+ N9 |: R8 s) P
  9. 6 N2 d/ i1 h4 Q1 V
  10. #include "RevApp.h"# h, @" @; v2 X8 ^% H3 x
  11. #include "RevAppDlg.h"- w9 U& b; N, e2 ~/ T
  12. ; Q2 C& V3 R* L  g# t& \
  13. #pragma warning(disable:4786)4 J# x$ C6 X( T
  14. #include <map>$ j' h9 m$ V% P: {' Z  M, [
  15. #include <list>* d7 k$ w/ |6 c& ~
  16. #include <direct.h>
    9 E/ J* x+ X9 \+ I3 r/ c

  17. 3 R* L/ \& T" v# x
  18. #ifdef _DEBUG
    - _8 W! k9 z4 p2 L3 o5 G$ d
  19. #define new DEBUG_NEW- d9 |# l- G0 m- I0 U" M  S  P
  20. #undef THIS_FILE1 p6 K/ b3 _; T$ c2 H1 x
  21. static char THIS_FILE[] = __FILE__;
    # g$ u- C5 B* `1 W" X6 {
  22. #endif
    7 ^2 }* U" y' b7 D9 G5 p, c( r
  23. #include "SkinResDef.h"+ N6 h4 Z7 ^9 a4 @4 e
  24. #include "ChangeBG.h"
    9 x( h1 o. a/ c  z( e& D
  25. #include "AFXINET.H"8 H* v5 z" i# A, u1 k* S+ d$ |4 _

  26. 4 P. z4 W1 o/ c( I
  27. #define TRADITIONAL_CHINESE 0
    ' b3 i8 g5 u7 S' m
  28. #define SIMPLIFY_CHINESE 1& m2 F, E1 c% _0 |; {! ?6 h
  29. #define ENGLISH 2; Z* e4 ^6 g; \+ \& R  N5 t
  30. int m_iLanguage = ENGLISH;
    # w! o$ H+ q) k+ d
  31. /////////////////////////////////////////////////////////////////////////////& ^4 U8 j% X, v8 [2 A6 F
  32. // CRevAppApp
    5 \8 t6 y! p7 x( C  s4 h
  33. ; s, v) [/ N6 R. h, d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& g- H& ^/ K. p5 P, D0 [7 C
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 W5 h$ B  z+ K( T1 N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # q+ X/ l: m2 o, y4 G& n4 m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 }# h4 a" a$ |$ T7 B9 C( w9 L: S2 n; \
  38.         //}}AFX_MSG) w) b$ t' \) |) [2 G' y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( ^. X7 A: l1 X4 n, O, I& B+ ?
  40. END_MESSAGE_MAP()
    / d& N$ k0 ?3 a7 s" ~+ w
  41. ) W+ y6 _+ z8 Q* I' g2 B
  42. /////////////////////////////////////////////////////////////////////////////* Q, Q; ~. a( R7 V6 G
  43. // CRevAppApp construction
    / B" V* t, g0 k' S! U
  44. ! b7 {  W6 X: Y$ _
  45. CRevAppApp::CRevAppApp()( a# }: K; d# R
  46. {
    ! `  ?, [3 ~0 E' N( i+ u% O
  47.         // TODO: add construction code here,
    " T: P$ r, b$ v! e8 J5 M8 y' [7 `
  48.         // Place all significant initialization in InitInstance
    ! F# Q4 F5 Z( f7 o3 ~0 s+ F9 b! V! j
  49.   bDisplayIsBig5=FALSE;
    / D& y4 T8 j& i3 s: C9 u
  50.   bRestartUpdater=FALSE;% P4 E5 B: t' O) ^# p
  51.   bFinishUpdated=FALSE;; h8 N0 g& i7 f7 Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;4 v; h" x2 c: V" J' A9 w
  53.   InitChangeDataBig52GBKS();
    4 f8 g  ]7 G7 h5 E2 T
  54.   InitChangeDataGBKS2Big5();
    ; {3 v* v" y) O# y% |  k
  55.         //( P5 k; y5 J6 f; H
  56.         bClickRunExe = FALSE;
      L7 o* R& f9 r: Z( h
  57.         //
    * }3 s$ X3 z: l# t% e4 o
  58. }2 g& o6 W' s5 `) o4 M

  59. 1 H- m0 w/ I) i% M  h
  60. CRevAppApp::~CRevAppApp()
    ( y6 l3 n  }, ]' b
  61. {5 f0 ]) A- ]+ M/ ]3 R  E
  62.         // TODO: add construction code here," p1 S) T! W1 N6 V8 P: w' q3 W7 X( V
  63.         // Place all significant initialization in InitInstance
    . _" e8 `+ {  B  t
  64.   EndChangeData();6 v8 p6 i6 W0 Y+ F
  65. }/ E# A2 x9 F  ]

  66. ; H5 e3 y( l" e4 `
  67. /////////////////////////////////////////////////////////////////////////////& v- [. L& D9 \% r) Z% c- @, V
  68. // The one and only CRevAppApp object: ~6 x1 l2 w# `" c8 Y2 A

  69. ' h& X4 Z' x: m+ C# f
  70. CRevAppApp theApp;5 _! f* t4 F( V
  71. , f6 B8 N4 ?! A) [
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - O$ Y* f( D- X" i$ W3 _
  73. {! P, q- U' @. @
  74.   int iEOF=0;
    0 s/ Z" z* s% f0 _; k7 H
  75.   char szTempName[MAX_PATH];
    5 E2 {6 J, j+ t6 o" B
  76.   *szFileName=0;: s/ Y% T/ \3 G, Y! _
  77.   iEOF=fscanf(fp,"%s",szTempName);
    / z# S* j. c! C  G: y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , j6 `- L! T: t8 G+ t+ ?  e
  79.   {
    9 `) l- d; A% F  b4 F7 {+ O
  80.     strcpy(szFileName,&szTempName[1]);3 g' Z  h. _& O/ G7 t& d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # S6 t5 }9 j. I: x" e
  82.     {. x9 ]+ @& G- y, @
  83.       iEOF=fscanf(fp,"%s",szTempName);' P) G2 P0 n6 i
  84.       strcat(szFileName," ");% n8 r0 o" Z; k& l$ [7 M
  85.       strcat(szFileName,szTempName);1 D" `6 t7 X, ^
  86.     }( V, _$ }2 c# A( c2 K2 {; K
  87.     if(strlen(szFileName)>=1)5 E. Y) u) ?" [1 d
  88.     {) E0 I! S: T, I9 Y' C3 m* s7 G
  89.       szFileName[strlen(szFileName)-1]=0;7 F% n9 g# k% {2 [, v3 N
  90.     }
    ( M$ e: q+ G  B" Y
  91.   }1 O- O+ y- O. U& u
  92.   return szFileName;
    % u2 w) O! e, y' E* n
  93. }
    , m2 [5 \$ w5 E! ^' B0 B
  94. 5 E3 a- H( Q$ |* k, I1 k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 ?1 M; W3 R5 S9 p( \
  96. {2 r! |! b+ Q& i
  97.   FILE *fp;
    % H4 x+ q6 x. @& S/ \* k2 y
  98.   char *key=NULL;
    3 z0 y6 x: `! ~- h/ ]% A! ]& \
  99.   char version[MAX_PATH];
    7 S2 h0 ]& G% n! }7 K% p
  100.   LPUPDATEFILE file,olds;
    ! E( X* t7 }* W9 t) g, p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 w, S" b/ m0 E& M# V
  102. ) H) W6 h% Z. \  @7 l. I2 |+ q9 s
  103.   UpdateList.clear();
    ; A8 F3 V/ W2 N; g" z* ^' q
  104.   UpdateFile.clear();+ U9 D: j/ t% h# I3 T. Q
  105.   if(GetFileAttributes(filename)==-1) return false;- e3 |7 {% o) }3 l0 z0 s2 s# Z8 V
  106.   if(!(fp=fopen(filename,"r"))) return false;5 w. b& I( \9 a, k% j3 h9 e3 o2 J
  107.   fscanf(fp,"%s",version);2 Q- y/ R5 B4 c& X" w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* V) F5 t/ w/ S  a6 w
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 g' D/ _9 e. N" B3 O+ E
  110.   {
    : F; q3 y8 n4 `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 f- U, e# @% b" B+ U5 t  w1 k
  112.     fscanf(fp,"%s",file->path);
    % n* k* x8 J0 H. v
  113.     ReadFileNames(fp,file->file);- Z4 v- i* @, o0 c. o
  114.     strcpy(file->full,".");
    , J4 s( l; r1 K6 v3 V4 T9 y
  115.     strcat(file->full,file->path);
    & O" O& V9 `. I
  116.     strcat(file->full,file->file);
    1 u: U4 ~6 B8 ?# E. }
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ' m$ g% ?* M, @% a! g
  118.     {, O) z9 }* L2 z7 c3 D( ]3 [* D
  119.       file->vers=(float)atof(version);% t3 M* @. m$ }' ~- J) @
  120.       UpdateList.push_back(file->full);
    ' p8 ?, F8 B0 k7 P/ v+ i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( g: Y! S+ I: ]& n) v$ [3 h* z+ k' \
  122.     }
    * e% \2 v; `1 r4 K6 ~# {0 P
  123.     else$ q. k$ ~; q" |8 W9 _/ ]
  124.     {
    ' w4 R0 R( b; o
  125.       olds=(*p).second;4 N- l  K- C- V& p9 ?' j9 C5 h
  126.       if(olds->vers<(float)atof(version))
    " v; Y6 d7 x( n& q* N  `* ?, H5 z$ Q+ N
  127.       {# K& _  r4 V4 v2 A  V. p7 e. D
  128.         olds->vers=(float)atof(version);4 z9 ^* d! n/ T, g( l
  129.       }/ o" P' t! A8 O3 D& x
  130.       free(file);
    + H5 D5 w0 \, g5 I$ f
  131.     }- B$ S8 S4 ?" e+ r; h
  132.   }
    7 C/ M9 X/ y+ f3 a! O
  133.   fclose(fp);9 [, w/ \! C4 X! w
  134.   return true;
    ' i1 Y' U9 h, N( l2 @
  135. }
    5 u6 M. y6 x( L( F

  136. . _6 w# C- S! e$ e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 S1 V" W9 o6 X2 V
  138. {
    . Y6 K6 \2 [5 s; ]: e, E8 `
  139.   TCHAR  szFull[MAX_PATH];: m6 T! a7 y# R
  140.   TCHAR *token,*inter;( w+ q) `, Z/ V, x% Q
  141.   *szPath=0;
    3 x, h# S" L) b/ ^
  142.   strcpy(szFull,szFullPath);
    8 u* w9 @  a4 b
  143.   token=strtok(szFull,"\\/");
    * u* @- o! [5 }4 f
  144.   inter=token;
    ( L( m& W$ _( L9 u/ P* M
  145.   while(token=strtok(NULL,"\\/"))9 l5 b( f4 G1 N5 A; s
  146.   {7 x6 G0 V- a  s: J5 Q) ~+ Y
  147.     strcat(szPath,inter);
    / R6 }* D+ d; G
  148.     strcat(szPath,"\");
    9 Q! E- O( ]) }+ t% j; q. s
  149.     inter=token;, }% w: L, \9 [' v- [, w. f9 b0 n* b
  150.   }
    ( r" j$ Y; q, r
  151.   return strlen(szPath);
    # _0 G4 ~, Q5 }
  152. }# V  V" t4 D0 _% J+ \

  153. & A9 k0 P" K' o/ u3 L4 d3 d* D* h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- J' b& m4 R: q7 ^; }' X
  155. {
    1 G8 R  j2 L# M6 R- l' F6 C
  156.   DWORD attrib=GetFileAttributes(Target);2 U+ V, r* _, ?
  157.   if(attrib!=-1)# V6 t" k+ N6 |9 y
  158.   {
    ) \$ X7 p/ t* t( @$ z. P, i( b1 B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - A/ F! W6 A- J# ^4 c% W3 Q4 B
  160.     {
    ( @. `, g% T" _6 J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 d1 ^' P% [8 N7 [
  162.       SetFileAttributes(Target,attrib);
    6 b% E- P, C9 ?9 o! C
  163.     }: h  H- E' e4 y, M& z
  164.   }% G0 r" u' E6 Q. O' R4 [) W5 \
  165.   CopyFile(Source,Target,Erase);; s/ {- H! I: m/ u/ X
  166. }
    + o6 d: y. C1 ?' t
  167. 3 e9 {& `- E! f  @& S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% [/ _( f/ [) B/ P; f  o
  169. {
    ( R: ^/ t5 C/ O7 P
  170.      FILE *fp;! \0 V% V) J1 N3 U  E
  171.      char  szBuffer[8192];
    9 e& p* D# \$ I7 N( T! G
  172.   va_list  argptr;1 C( f5 Q6 J1 }

  173.   M+ L9 b5 j% d
  174.         va_start(argptr,message);$ u/ |, e( P  m; G! J
  175.         vsprintf(szBuffer,message,argptr);
    + ~8 p8 U. h. L8 _3 P! l2 g8 q
  176.         va_end(argptr);/ U  ^' f: v+ V- v# o
  177.   fp=fopen(FileName,"a");
    . t- U8 C/ R! z1 r
  178.   if(fp)5 V6 h7 i6 N6 H1 n( S
  179.   {
    3 }, b/ ]3 C. ^8 u6 A5 |  I
  180.     fprintf(fp,szBuffer);/ U9 `' e7 i- b' q& N& ]
  181.     fclose(fp);
    ( D% |: p3 S- M. D  s* i0 y. p
  182.           _flushall();
    + ^2 `; V$ d% V1 b& E8 ]* D: x
  183.   }
    ' A2 E0 s% j" @' D  }, W/ I
  184. }+ \2 e3 X1 f" B

  185. 3 T/ J/ {6 y+ M/ v5 C
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ k1 }2 U% E/ C: P0 R+ }
  187. {
    $ j0 f+ o4 H6 j- w
  188.      FILE *fp;& s- Z* z% \" T9 e
  189.     DWORD  attrib;$ J" P" X( U# y. D3 K
  190.   attrib=GetFileAttributes(FileName);
    ; ]0 g0 N5 k. l' {4 t4 y' _
  191.   if(attrib!=-1)" A, e$ \( a! r+ j: U. U
  192.   {
    0 C5 `5 w( I- _$ y; r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 Q) U- s3 j* n. m
  194.     if(!SetFileAttributes(FileName,attrib))
    $ t4 }/ K' k  h  Y/ W
  195.     {: D6 |! g# e+ }8 I
  196.       return FALSE;
    ! R4 j% G; ^/ R8 b: A3 Z/ V& ]
  197.     }  p' g8 O/ g( B; l" t. G( \$ K
  198.   }
    " t2 ]# s  F& a# x) @2 @# X8 `
  199.   fp=fopen(FileName,"wb");  i9 Y; ^1 B" ]; z  c- `; X- Y
  200.   if(fp), {2 p( p; Q) x& q/ P' }
  201.   {& E7 l9 h0 {, l2 w% u; e
  202.     fclose(fp);
    * Z9 S$ C1 D$ h/ G9 O" K& n. ^
  203.   }
    & O0 T* [/ k! W# U
  204.   return TRUE;
    2 M3 M( E* f1 k
  205. }& h2 |7 @3 T% x9 M+ H
  206. 8 p- \, \5 f. f7 h$ L# p- M
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 I9 |: K* N: f& b
  208. {
    ( P5 Z) K3 B& q& o
  209.   char filename[MAX_PATH];* {1 n9 u/ ~1 D, _
  210.   LPUPDATEFILE file,olds;! F0 m7 L/ U& O% \, M, W
  211.   std::map<int,CString>::iterator i;7 g% C1 O# U  z0 G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
      H! Q, D$ y* h. E
  213.   std::list<CString>::iterator l;
    ! K4 u; K( |! s

  214. 8 F, S% |' d" }- N4 @% c6 m" M
  215.   if(bFirstUpdate)
    . u: A; z$ e  [
  216.   {1 }1 M4 c5 m7 g4 w5 i, [
  217.     dwCurrFile=0;
    7 K$ h; l# @% \& E" |) J! a
  218.     bFirstUpdate=FALSE;$ \/ o9 M- c' v+ N! L( q6 x: R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 L3 p6 G' r4 E' S) }
  220.     {& B: b# ^8 D& r6 R! ]) b' Q
  221.       dwTotalFiles=UpdateLocal.size();
    & F- R) u, e9 {4 \8 \, ^- Z) O
  222.       dwDownLoaded=0;6 u6 ?8 o: }8 g" q# B4 O+ a
  223.       bSilentStep=FALSE;% T2 S% E# @) N' U0 `1 G1 ?: D
  224.       bCompressed=TRUE;6 m: W# j' o  T9 [, r6 m- @$ z
  225.       strExtLocal.Empty();
    ; g9 y3 C# h2 |# b& J
  226.       strFullName=(*i).second;$ A2 O+ E% \6 N% l
  227.       dwProgramState=AP_CONNECT;
    & H, S, W: ^" D" ]
  228.       return TRUE;/ j" ]) J+ Z0 j. i
  229.     }
    3 U- q" G7 L# f, h5 M+ X. V. P# Q1 [2 y
  230.   }6 T  s1 u! y" g, Q% Y
  231.   else if(bRestartUpdater==FALSE)3 W! f7 ]& b! r
  232.   {- _) H/ n/ t9 H0 o/ i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())+ D8 d3 h8 J. e7 ~8 F
  234.     {
    . a" ^1 o* G1 M2 r3 k1 B
  235.       file=(*p).second;
    + ^+ |9 K) t8 {7 H2 N1 u2 A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ! w# m) M7 L; s  p7 u6 |5 \# C, r
  237.       {, i, V, g$ @& [* E' H! l
  238.         olds=(*p).second;  k$ l' }% ^  g% c, e$ g& H6 _
  239.         olds->vers=file->vers;2 N& [4 K  e; H7 V. i
  240.       }0 T- N% r; O4 @: T% u8 ?& P$ b! V
  241.       else6 B6 P" ]. w$ u( K
  242.       {# q- x+ }# O- [. L5 y2 I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ Z, ?! ~4 \4 d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . B/ v2 ?' {/ Q/ N0 J  G+ ^6 L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 J6 E* `* A' L  e, n+ m1 T9 r
  246.       }1 v& ~6 t& i1 B" R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ W3 X4 n) @$ f; x+ [
  248.       sprintf(filename,"(%s)",file->file);5 W" W; x+ ~3 k  w( B& c+ i6 X# g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 o3 J0 p! ^- e2 L' G4 v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ q# ~) U8 _, q7 H  o
  251.     }
    1 ]) M! {3 v% o& W
  252.     dwCurrFile++;9 R# T4 n. s, A  T8 _+ a7 ?/ Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / x5 [) u) L/ U6 d/ ]1 P$ h  _2 [/ K
  254.     {( ^3 Q3 W$ ~! t2 V# D$ e
  255.       bSilentStep=FALSE;
    & A1 Z& k4 Y3 ]* _0 O3 z
  256.       bCompressed=TRUE;
    % \# O' [  P8 ~
  257.       strExtLocal.Empty();* X. j4 f) c3 H$ r& U$ c9 [
  258.       strFullName=(*i).second;
    , f7 g, a& E% g0 e7 y: g- ?
  259.       dwProgramState=AP_CONNECT;. N' G+ s7 k# ^4 n/ J0 X2 l; h
  260.       return TRUE;" _' o# h3 g2 D7 ^  k1 S+ }) p
  261.     }
    ; s6 `, j: }0 P
  262.     if(!bRestartUpdater)0 N, b# J& V4 G  t/ ?+ P* |3 s
  263.     {
    " g' A9 p- z1 Y) m' {0 W9 s
  264.       int iCurrSize,iFileSize;
    6 c9 W8 F; x3 i' A) m; Q) y  ^
  265.       iCurrSize=0;
    ' M/ i( T% b( \/ K% e# e6 ?
  266.       iFileSize=UpdateList2.size();4 q2 q) g. N) Y! P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");" k$ s* Z, Z8 ^! V- {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , ^5 g) H! K$ p/ v2 K1 Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");/ I! Q2 W& J; `8 W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : s1 R& h1 w! j9 {* b
  271.       Fclearf(".\\update.dat");* d; a9 {/ }! o, ?) J! V
  272.       Fprintf(".\\update.dat","Bloodyf\n");* W: R1 H! M& S' s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), h5 m2 Q- ?/ I
  274.       {! v: F- _  E8 r) X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ! H4 d6 |" L! i- n) }6 W0 a1 L
  276.         {) ]- v" ?, X2 P" |
  277.           file=(*p).second;8 F% c, E. j/ X, s) r6 ?% ]
  278.           sprintf(filename,"(%s)",file->file);2 x3 U% q7 G7 K- H7 j: f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 S. g, h9 d% i( d' Y& b, \" y( t) ]
  280.           iCurrSize++;
    ' ?5 }/ ?" Y# |# g  M8 w3 w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));. {& {% `( K8 q5 Q( b2 M
  282.         }
      d7 S: H9 \/ _) t( t' D* g
  283.       }, ]! O: E: [" I# q2 J! R  V/ \
  284.       unlink(".\\update.txt");
    ( s+ s& D- t0 q. ]0 A3 }  F8 h& a
  285.       unlink(".\\update.tmp");
    % ~- C% E# F* Q0 J
  286.       Fclearf(".\\checkversion.dat");& u: V1 n( H$ i, q% u' J1 _, @8 S, k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    9 E$ W( {7 f2 l, z) e
  288.       if(UpdateLocal.size())
    9 P. l: y* J- |- G8 Y) b
  289.       {
    + x6 j) q7 r  f  I) t& p
  290.         UpdateLocal.clear();
    ; g4 ?7 [; E8 l: @# j& N( Q  l" L
  291.       }
    - M- }- N; d& ], O0 Y
  292.       if(UpdateFile3.size())
    ) _' N9 @, X( I) V* h
  293.       {
    + ~' ^& n/ b2 Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 p/ N9 p# u9 v$ h# s1 I" _
  295.         {
    . x% R( z) O, w6 H+ ]
  296.           file=(*p).second;% ]; @5 V' h$ T' d$ R
  297.           free(file);
    % }$ \/ e* h* y
  298.         }! E: Z& O8 u! F$ c
  299.         UpdateFile3.clear();
    5 ]$ Z" U! N% \7 e
  300.         UpdateList3.clear();
    & l8 l* O4 [! G9 r
  301.       }; A" }3 r* |2 ^3 Z$ N
  302.       if(UpdateFile2.size())
    # {6 T7 E( M& V8 L$ V8 [0 p
  303.       {+ X" Y* k' F  D1 [8 E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! e7 E, A2 F) x2 q4 S" \
  305.         {- j+ o6 W% Q2 O: O, j2 H$ X
  306.           file=(*p).second;2 [5 @/ c/ `% j% j+ N5 Q
  307.           free(file);
    ! D6 _& T; O  R. o+ Y+ ?
  308.         }
    " M+ |" Q) V- D' u3 l3 t  N
  309.         UpdateFile2.clear();
    + a9 {: A5 c+ p" N$ v' n
  310.         UpdateList2.clear();9 r# Y, g, p2 ?& p
  311.       }
    & c! g7 [0 P) @( f7 {; b* m
  312.       if(UpdateFile1.size())
    ! r3 D$ \9 q1 `: ^7 [1 v
  313.       {1 }8 f# V% r  g; ^3 o/ m/ N) S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / _5 M- O) W/ J) |8 |9 S6 V! T5 B: D
  315.         {
    : Q% N- F4 R  z% _- I
  316.           file=(*p).second;4 S! I' _' C' r9 T
  317.           free(file);/ J' s! K5 L' P2 h% C
  318.         }
    : N' ^+ x5 l3 \  `5 U3 @
  319.         UpdateFile1.clear();$ Y6 y) p: X9 A+ S% O2 Z4 n
  320.         UpdateList1.clear();
    8 K5 d8 q4 B, Y; P
  321.       }+ V; T3 F. l2 T3 W4 G# J" ?* u
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 @4 E! _6 ]0 L6 `5 ?
  323.     }) W; M1 w0 m! t; x! ~% y
  324.   }9 _$ m, w8 e9 m2 ~! T; w9 I1 y- l6 Y, U
  325.   return FALSE;
    * I, Q7 f" C' I5 i
  326. }
    4 g7 [/ P% u5 i

  327. : w/ A: j+ e9 r3 n+ Z) |: f+ `
  328. void CRevAppApp::ClearAll(void). W  v# Y1 N4 \6 Y6 E5 h# V
  329. {1 s* I$ a8 e7 b0 d
  330.   LPUPDATEFILE file;
    . O( D. z3 k$ \7 M; J# F. x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : B0 l: x$ R7 @! ]+ [% ~' c
  332. 9 U! z2 w6 ~, t2 T) a" n& h* C
  333.   if(UpdateLocal.size())8 R1 R6 @! W! m; S3 t
  334.   {# N5 ]. ?, D5 ~, m2 d4 M8 M
  335.     UpdateLocal.clear();
    # t3 E& r- A& y! V1 B4 P( [
  336.   }
    5 d1 s7 l( T# o+ p+ X& E2 g7 U0 y# ]
  337.   if(UpdateFile3.size())
    $ |9 l$ j1 e5 _% Z
  338.   {, r. N* V- J% j# S" l" @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 c- L2 D5 g. `6 `+ H7 E
  340.     {; I  B& C" Y3 L: P( U" S
  341.       file=(*p).second;* F" G* `8 B1 g
  342.       free(file);( F2 n6 ^' v: E
  343.     }% z; S* \0 ^7 D/ l1 [7 g) N" e# X
  344.     UpdateFile3.clear();
      w* S' w% L8 l) F% w
  345.     UpdateList3.clear();
    ) d: |" `: o  e
  346.   }& `4 q* I" G9 C& f3 i) M1 x4 K$ b
  347.   if(UpdateFile2.size())
    2 o+ B& E3 P; c& J$ g
  348.   {/ m; k9 Y. }; t3 N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) u' f0 Z. ^/ u" t1 ]/ o
  350.     {
    . [0 ?- Y' y6 I) s
  351.       file=(*p).second;2 K. _( E: j) T% Y8 H1 }& S$ a
  352.       free(file);
    # `* x/ J$ L8 M/ ~
  353.     }% t6 C6 v9 v3 G. i+ @2 a( B
  354.     UpdateFile2.clear();
      u. z+ n3 o0 K8 y- f+ w9 J# ]  X
  355.     UpdateList2.clear();1 d; D+ E, V, F0 y2 r
  356.   }. w4 T2 F; \  U6 {( _8 N# f
  357.   if(UpdateFile1.size())
    6 \; }! W, i. U/ @6 W$ c
  358.   {8 h  `8 l% G; w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' ?* |% M% h8 S
  360.     {
    3 }8 K2 o! `5 Y6 y: W
  361.       file=(*p).second;
    : ]7 }  p6 Q' G% _& Y
  362.       free(file);- L" H* U/ m7 R1 l9 C: O
  363.     }
    0 q( M0 ~3 h4 R$ @
  364.     UpdateFile1.clear();
      W9 U9 v, C0 W, Y
  365.     UpdateList1.clear();
    . [3 u3 k  z# h$ O) g4 ^
  366.   }
    6 L4 y/ W" r2 E  Y3 B
  367. }  $ }  _3 Q$ d5 N0 X; L; f, J" ^' Q
  368.   
    : v9 P7 e7 E/ R2 W+ i! M
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 r; v/ q  x  N1 v$ l  N4 V. G
  370. {
    0 _! n. B* R4 r3 z6 T
  371.   int c;
    , o8 P  Y; u, b( Z; O. T* g
  372.   LPUPDATEFILE file1,file2;; j+ N, z& [& y/ [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! D3 ]; T5 Y% n
  374.   std::list<CString>::iterator l;- O7 r2 R9 O, O
  375. 8 ^! R% r/ f! ?; t; _# R
  376.   UpdateLocal.clear();
    ' w2 U1 \0 g, g1 Q6 l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);" o" u( j; E/ O- O- y% i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 M9 `! Y6 c( D2 u0 U, v% s5 b
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + \/ Q) g) Z# F4 m. }4 L9 T
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 A8 M! V! F' J, `+ n5 Z; v4 E3 i
  381.   if(UpdateFile3.size())7 H& d. D- i/ H# C
  382.   {
    7 X, w) _+ ~6 h; ?0 r1 K6 I
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++). K$ ]  n5 O6 [8 u2 Y
  384.     {& \& |7 N. l! F
  385.       file2=(LPUPDATEFILE)(*i).second;9 h; _2 p4 f& ?! ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      Q' o( z7 r9 L" d+ I) m
  387.       {
    7 a0 _+ v$ v6 q* `( h; O% k, K
  388.         file1=(LPUPDATEFILE)(*p).second;* h, N7 m8 L# U( s* y
  389.         file1->vers=file2->vers;
    4 Q; L: O# L) B
  390.       }
    - ?) z4 I) Y7 n/ D( i7 F
  391.       else6 R$ ~6 `! J  G) `* J# T* R7 S
  392.       {! u# |5 C! a- \7 a( ^6 k
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 m# m: B9 Y5 P# s  _5 V
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" X# a0 q! w. q+ u2 t, j  f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));( K7 A4 T% I1 E. y8 I- c! w( }
  396.       }  b+ u+ u5 k- \/ A. w
  397.     }
    # n' ^+ \- A; y+ F' V, `6 R
  398.   }
    & X3 s) H; m8 c, s$ n0 I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * B9 {! b4 j- u
  400.   {
    1 L8 _, A* N' c6 }1 \6 x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # f; m# `4 y1 H) l
  402.     {
    + `' K  i* O0 v+ L2 m2 L9 F
  403.       file2=(LPUPDATEFILE)(*i).second;3 I6 [, D# Z. N$ _2 ^4 y/ s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 u+ l1 k0 J: F( c' B
  405.       {# a8 _3 a( y0 K. Y. `) f  p
  406.         file1=(LPUPDATEFILE)(*p).second;* N7 W1 P8 q8 U# z" ^: A5 }' k
  407.         if(file1->vers!=file2->vers)
    1 h$ P9 \8 W. L, L# S1 c! X% }
  408.         {
    2 c) s7 n4 Z# w6 U! ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( G$ J( u+ E8 S  O" @& r6 G
  410.           c++;% ~. P+ w# N; k4 U# l2 N5 f! V9 {; r
  411.         }
    # O% F5 E  N  v9 j+ b, d
  412.       }. c' B! K9 n  ^+ \, l4 s" Q
  413.       else
    5 t1 l* S& x4 }3 Q
  414.       {
      E! v" G" ]3 ^! U; Q( P# \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + N) Z2 Q8 b% R% {
  416.         c++;. ^6 S; ~! S* e6 s$ U1 F& M1 [
  417.       }
    " `% ?& e/ v7 j
  418.     }, R6 X8 r$ V8 H) d' E5 S
  419.   }' D+ s6 A- k4 E# k8 `
  420.   unlink(".\\DownLoad\\update.txt");1 Z5 |1 B4 S/ {  p. A
  421.   if(UpdateLocal.size()) return TRUE;
    ' N" B' G0 y# k, i9 g+ w
  422.   else                   return FALSE;
    1 V( g; J' H0 k$ h$ X7 U" L' v
  423. }
    . W- F. Z3 O  S% R6 u

  424. 4 ]- \# u9 d" u/ Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& {; ]  a$ D; ]' Q; z6 Z& F
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"+ j. F/ W3 |& w9 [5 r" u: F
  427. ) v2 ^5 `. O& P

  428. 5 M) T3 l, g% b1 _, C" x. h% h5 n

  429. 6 t0 `4 q! P) ^9 q/ }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    # t5 j8 _/ w7 y3 }6 s0 X$ T
  431. {
    1 T% U5 p5 ]' Z0 ]( Y) P( m
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 f- W: q8 i. c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 c: a1 @, }2 b; B4 d
  434.   {, `1 b" y! i% I/ i# c1 p, y/ T7 T$ r
  435.     char szLanguage[50];& q4 f5 x! q0 H$ ?5 y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% ]% {2 V' Z, C" H6 i. U& ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 G0 `. ]  V3 q6 i! q; S
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ r. F! Q/ z! Y5 X
  439.     else                                   m_iLanguage=ENGLISH;' I" E7 Y6 ?3 o5 p$ i: Z% E
  440.     char szRegister[100];
    % Q. h6 Q2 T; E6 V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      F: {- ~6 n' |9 [2 S" j  z
  442.     strRegsName=szRegister;2 c7 I3 U* ^3 Z; b7 M, `3 a; Z( J
  443.     char szPatchURL[100];3 p! J! Q% ?) l* w0 F) ?3 w& O
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 m1 b) P0 L  Z7 l1 ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # Z5 v$ @: e& H) b4 s* j3 @' s
  446.   }1 f: l5 P. r. d) a. }' u6 w- {
  447.   else; |6 T% m$ |" [5 H  r: R
  448.   {+ `! C9 `' P. U: y" {% P' G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 y2 ?6 N: V+ {2 m
  450.     strRegsName=DEFAULT_REG_URL;% U+ b7 z" k( v. o  q( Q/ A& ^! S8 \
  451.   }
    - s; x" W) J# r" E$ N( h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 o0 F. f3 w6 h: `; T  H+ @
  453.   {5 V9 }) W" k0 f  P  L& r2 h
  454.     char szIP[50];4 n$ X$ ^0 I1 e, s
  455.     char szDIR[300];7 T* E" z2 B' V6 F
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))& W& d. l  |" L' J: T; K! @+ E
  457.     {
    + f8 D: T+ h0 E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & ~8 i' b$ B# R* R7 Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 u1 P8 ]4 e* H# x+ F: T
  460.       strHostName=szIP;1 t$ W' A- Y+ c5 X; X, M
  461.       strHostPath.Format("/%s",szDIR);2 `# u- V2 Q4 [1 {
  462.     }* A& y( H2 ?% o: h0 e7 E( W- B' u% w
  463.     else: n' Q/ u% i' {& V& `7 B
  464.     {; `; B& I' Z# q3 j7 J4 h, _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - r  B% t8 q  z
  466.       {+ T' E$ h$ n1 ?' ]1 ?
  467.         char szLanguage[50];
    / f8 a$ t5 L9 J8 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      a4 p7 K$ g2 t3 L) F
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , W+ G/ s9 N" O% _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - y- W+ |7 M; n0 Z! z
  471.         else                                   m_iLanguage=ENGLISH;: z9 i* i% M2 O1 Y
  472.         char szRegister[100];
    5 B4 E; @& c3 y7 G" p& Y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 ~) B9 ?9 u) V9 L/ E
  474.         strRegsName=szRegister;
    . d- U, x& t8 i9 V8 O- s
  475.         char szPatchURL[100];
    6 }2 V" ]' d/ k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 d7 {2 }* P' l8 O9 P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 A8 z; z0 f* B3 W8 T& z8 ^; M
  478.       }0 w+ K  b* p7 _2 \; \& P- a
  479.       else  [8 x; e) Y. v- A( P/ D4 X
  480.       {
    ! q" W  t/ ^- ~, T. _& T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 w7 r8 C) I" i; `6 _3 c: \( b
  482.         strRegsName=DEFAULT_REG_URL;' Y' E% p% {! B. _  Q
  483.       }
    + `+ Q6 Z$ ~: w$ G/ d
  484.     }) b& ?+ u/ B% }# x( _! l
  485.   }
    ! k" O9 y9 B0 t) I
  486.   return true;
    7 S8 `# {1 i1 v% ~# l! U
  487. }3 Z2 y- [3 C9 y" r3 i
  488. : i4 W+ a) e, f
  489. #include ".\ZLib\unzip.h"
    4 R2 n2 C1 v8 w# @8 f. P' P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # u4 S; O+ P3 z2 l
  491. /////////////////////////////////////////////////////////////////////////////+ S5 q" K! P  K% _1 X) q9 R
  492. // CRevAppApp initialization7 [" J4 @7 ]# k+ j( i
  493. # o; a4 E7 w3 u. t/ d' i+ q' Q
  494. BOOL CRevAppApp::InitInstance()
    5 r" Z4 K' i+ l3 f
  495. {6 g2 j' e4 t9 V) P2 H( |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];! C6 l* b+ w9 ]1 P# L/ x

  497. 2 L  H' ]& }4 @9 A; e" b& j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 Y1 \2 _  A* S6 _7 |* N
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# n. e9 Q! }, O& g
  500.   {6 }7 C. G9 k2 T8 x1 c7 v# y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * u, n' L! q& z' k5 N5 _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * e/ A5 ]1 i5 y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( H' L/ U+ w& U& l$ Y" \4 H3 `
  504.     {; J& ^& f3 v2 X, t4 u5 `3 r6 {+ w- ^
  505.       strcpy(szPath,szPathTarget);% f# n' S" K2 T, F# N& F# @
  506.       SetCurrentDirectory(szPath);) s! i; S" D2 z: R8 R) t1 {  m
  507.     }
    : x9 R: I, V) J4 a
  508.   }
    7 u4 w7 {6 G5 j  r
  509. #ifdef _DEBUG4 V! i9 ^. C& I8 ~) p6 ?; N$ f5 V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ l. I; o9 D% X8 T* H5 W/ q
  511. #else2 W, ?+ q) k$ i! D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ r6 ^- j, j* q
  513. #endif
    ) J) K! u' h3 {+ a- i4 W5 k  y
  514.   {# a$ J) _5 M' e: c
  515.     char tempFileName[MAX_PATH];' K8 z. o% C$ i9 J' l/ C8 i2 W  g
  516.     strcpy(tempFileName,szPathSource);- _2 g6 ~) p" E4 L( Q* g0 p
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ y) C4 E. l' z) j/ f! P( k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 ?' w/ V- ?) z  U( g: M7 W8 N/ t% e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % r# r7 c8 T! \+ a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% g# W% [: F- E+ }. J. `7 e
  521.     return TRUE;! h$ p0 h5 c( ]5 ]0 \1 I2 P
  522.   }  p3 ^1 |. C/ I2 N
  523.   // Nuke 0118: Delete run.exe
    ) ~9 k$ Q5 G% s- f7 i9 P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & a2 u, [6 ^8 x7 f2 p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    8 J0 J0 m" v, c+ l
  526.   if(!ReadCfgFile("Config.ini"))
    7 d, n  ^' F% Q, `
  527.   {$ s# x5 M3 T  c  j: ]0 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);) R8 U/ c6 {: h+ B4 n: H
  529.     return TRUE;
    + @" ~% c4 f3 Q+ r
  530.   }
    , ]4 G9 k4 M; |  ]
  531.   HANDLE mutex;) I- n7 J# F$ u5 v. [+ N/ a# `
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 c: G4 `, K. P& ^1 s$ C8 v
  533.   {
    0 l4 r. N$ I7 G" Z( c! X, t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    9 V1 ?& V# r1 r
  535.     {, N1 V9 I! A4 `
  536.       CloseHandle(mutex);" r, }* p# R1 R! a) ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 A  ]1 l/ _# L; x
  538.       return TRUE;
    ( G6 {! u8 s8 M: a; j' i
  539.     }
    ; _' u( l$ t9 Y8 X: O
  540.   }  
    / U- E* m. c& ^; U: ^  @/ E* }
  541.   CloseHandle(mutex);
    7 J% X1 W7 x" [
  542. & F/ R& {6 Y6 |# X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( h) {& Y  f& E* v" D  Q" T  G* M

  544. ) i+ e+ q+ S; g* b
  545.         AfxEnableControlContainer();/ a! g: i. s: b; S! i' G; {

  546. 8 ^0 o8 [/ U! e# W- ?
  547.   bCanUpdate=FALSE;
    * \6 o" K, f" {7 \
  548.   dwStartUpSteps=1;- y4 T$ U4 d2 |5 ~" G
  549.   dwProgramState=AP_NOTHING;9 E7 z# T- e/ A2 [6 Q8 H9 u% J. V" {" Y
  550. # N# p6 v# z: c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    5 l6 G1 J0 |' J( B; ?9 K8 x' i1 V$ q
  552. " i# Q* O9 A/ r$ J# Q5 O, I+ w" f
  553.         // Standard initialization
    6 J: s9 E1 U6 P; v9 Y9 H0 K
  554.         // If you are not using these features and wish to reduce the size
    8 H  u# F+ A2 w/ a9 e  ~/ ]* i
  555.         //  of your final executable, you should remove from the following
    , p. x/ s( b- K$ M0 P* A% m1 V
  556.         //  the specific initialization routines you do not need.
    * b2 F0 {* e5 K, Y

  557. - X9 p; t  N# N; l
  558. #ifdef _AFXDLL6 Y# M. [; A. F3 ]* E: R- a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: [3 R4 S# Z7 l$ w
  560. #else
    ) ?+ E: |  o- ?* F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 P2 S* C6 F! D- D) C( W4 r- Y+ H
  562. #endif* D$ }7 L; `  o- s5 d
  563. 0 l$ B% h7 P1 _+ Z! Q
  564.   dlg=new CRevAppDlg;
    $ t$ G% h! D' J- r
  565.   dlg->Create(IDD_REVAPP_DIALOG);) s& p# v& N& n% x6 o+ ~
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ R9 h: X; T+ r# q: f
  567.   m_pMainWnd=dlg;
    9 H% a% |* k+ `/ m4 a
  568. / D" b2 t+ i9 i' V
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 v. D' Q; N6 C0 |6 R! ]* {8 n* k
  570. & ~3 ?' d& b. ?7 b8 K" e" ~4 [- n
  571. //  GdiplusStartupInput gdiplusStartupInput;) J# o; u. @/ t4 V. D% X  Y, i
  572. //  ULONG_PTR gdiplusToken;3 f) l6 A* O  s6 }' a3 T4 c# g. a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ G% A' @0 c4 b" |
  574. 8 m% ]5 d( I; B6 j$ B% {
  575. //        CRevAppDlg dlg;# Q7 |0 o# s: g3 D
  576. //        int nResponse = dlg.DoModal();& B9 f1 \% s2 _6 _" p5 m8 l8 K
  577. //        if (nResponse == IDOK)8 y+ j! w8 q$ O) Q4 {6 i+ k, k/ Y! R
  578. //        {
    - p5 w3 W4 }1 x+ E6 i1 R$ ^% Z
  579. //                // TODO: Place code here to handle when the dialog is  q5 H1 r* P3 M& W1 w% e2 `4 U
  580. //                //  dismissed with OK' T. ~* p2 x6 R5 B" n
  581. //        }1 h! I, T/ V$ v6 I) ]5 ~- E
  582. //        else if (nResponse == IDCANCEL)* s: c% `2 v' y" l' t, W
  583. //        {' p# l0 s7 [+ n+ r
  584. //                // TODO: Place code here to handle when the dialog is
    ) J) p* I0 g7 H9 t9 R
  585. //                //  dismissed with Cancel" |+ b, r. Z0 O3 v) w7 C, e/ W9 Z
  586. //        }% E2 M2 `0 _; X* m
  587. & D1 O' @/ a9 |# C
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    2 U( e/ h6 {' X0 ^! E1 m/ b
  589.         //  application, rather than start the application's message pump.
    ' Y' h3 T; k5 `5 Z: U. N+ ]
  590.         return TRUE;0 k" `2 {4 p2 R9 a6 L# s1 p
  591. }5 j% V4 X* w2 r1 O6 ^

  592. 4 W4 }. \8 i+ W: c8 E
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # i. C/ x: U. c6 d, q& q
  594. {
    " P! @7 k2 s9 }$ {0 d
  595.   int i;: g, K3 {" S: G6 T
  596.   char *szRet;8 D2 d. Z6 M0 g( N2 ]: m) a
  597. $ ~4 B  j% u9 a& b( N: g# q& u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , v5 a# p/ M$ k; ?$ `  N, d4 T+ J
  599.   if(sztoken)  ]8 e0 W' b* N# R0 F5 E# l- L2 }
  600.   {
    6 j9 Q9 g/ ]7 M  r$ N" U8 A
  601.     szRet=&sztoken[itoken];) {. P, {! i& Q7 ~0 G
  602.     while(sztoken[itoken])
    7 F) J. j6 i/ y3 H, \
  603.     {
    / n, R7 W. C% Z
  604.       for(i=0;i<(int)strlen(token);i++)5 y6 D# l3 A5 O1 C
  605.       {
    . p( c4 M2 j; E; c5 n5 m2 |
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % C, v5 ?0 S; Z8 \
  607.         {; q6 {2 S: c1 p
  608.           sztoken[itoken++]=0;
    5 u: z8 G- j+ j+ W: [2 ?/ o
  609.           sztoken[itoken++]=0;# ^; d7 |/ }) v
  610.           return szRet;6 K- A' z- N0 n3 c
  611.         }
    , p* A* o' k8 p9 R  L+ Z
  612.       }+ @" F" e+ K# Z5 r2 C. b6 e' P; m% J
  613.       itoken++;. [' O5 }3 j% K' x( ~* z: Z
  614.     }
    ) M  x/ e6 U/ A* H. g
  615.   }* c9 [! K( k* Z7 ^) V
  616.   return NULL;4 b* P* }, w+ ~4 I
  617. }$ k; O- Q; k' ?3 g- V0 N5 }
  618. - y% m8 p! F. L: I4 {6 I% M6 o+ d
  619. void ProcessProc(long Total,long Current)
    & I* x- G6 o' l, o5 l. z2 t
  620. {' |5 j7 f  S' [. n. y  f
  621.         MSG msg;
    2 G' D9 {" J8 P# G, q7 B, @6 J7 x! ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ s+ p. u. M% C8 o+ R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" f6 x8 s  ^1 {; E* o! o7 F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " d7 G. d& H1 f# U7 V5 }
  625.         {( t2 ~) R, f' }1 Q, ?; h  x
  626.                 if(!GetMessage(&msg,NULL,0,0)); H, y2 c7 U5 H8 F& |
  627.                 {
    + Y: a$ s: Z, h
  628.                         return;
    4 W7 }$ d0 B5 h, B8 @
  629.                 }
    & u1 }" L4 s9 U
  630.                 TranslateMessage(&msg);- b: f4 s  x6 @' Z& k
  631.                 DispatchMessage(&msg);
    ; e# G5 _5 w5 C8 O) m2 {6 Y
  632.         }        , c# V- T2 i6 \; k( D# b1 v
  633. }
    0 v( t8 ^0 r' {) Y- K' o: O
  634. # u: }$ H+ w- ~- x' m
  635. BOOL bFirstChar=TRUE;
    # b8 {: v* e; o& t& E3 w: f

  636. $ X; f# z- s: x8 W- N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! N% K" T, i: ^2 ^
  638. {
    7 ~' e( [% X9 F8 f9 h7 i/ n
  639.         // TODO: Add your specialized code here and/or call the base class1 S9 E2 i2 C7 l; ~$ s
  640.   switch(dwProgramState)& B- H( N% N% O5 L- y! K
  641.   {
    7 _: _: O5 q. U% }, N. T
  642.   case AP_NOTHING:
    # A9 c, l; X/ ?! z" q
  643.     switch(dwStartUpSteps)
    ; {# R' E5 V# ]% U9 H$ ?& U
  644.     {
    ) Y% U) L' Q8 O! d. W
  645.     case 1:
    # @7 a* M# o3 z1 Y0 E! Z
  646.       {
    8 l0 V& |! Y" f9 l# B2 N- Y
  647.         int i;0 y. h; g% D/ k! W
  648.         CDC *pCDC=dlg->GetDC();
    . u0 \& c" d; K' o
  649.         HDC hdcwnd=pCDC->m_hDC;
    - {. W' W; Y+ N: i/ @0 G
  650. //        Graphics graphics(hdcwnd);
    / A+ N$ a5 p0 c  [0 j' O1 _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 B; C- Y% u9 u# Y/ \3 A
  652. //        INT iWidth=bitmap.GetWidth();$ O; S, y. D8 ?0 D3 j5 `% q
  653. //        INT iHeight=bitmap.GetHeight();
    / j( k- P* n" e' b2 ~& h
  654. //        Color color,colorTemp;8 M- K$ o* ^2 x# W0 e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 g+ H; h+ u+ D3 I5 F6 I+ L) x' b
  656. //        {" U' c1 g# `/ i& f- U% Z  _' I
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & j$ A, g. I8 z9 d" ?
  658. //          {
    : o7 J  m* c2 ~
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    - ?7 E% b  i$ E( v* ^, P
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! K2 F2 ?$ z  V* B  }, ~
  661. //              (BYTE)(255*iColumn/iWidth),
    ( k" _5 ?8 v, {4 j. b6 X# Z9 K+ ?
  662. //              color.GetRed(),$ x+ q9 l- c  }1 b8 Z$ s
  663. //              color.GetGreen(),7 y- u  I9 v3 |; X) C' ?. q) d! T
  664. //              color.GetBlue()));* O0 i/ R5 [' b2 ]
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 E# z: `# y( E+ w
  666. //          }
    3 [9 k4 f$ k+ R+ f
  667. //        }
    8 p, X. M$ {% x/ m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' A/ H7 y, W6 G9 T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 k" G! s& w& h! m' ~+ j! X: ^# ?6 h/ W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 n; V6 e8 d% _9 F9 c2 W  g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . E+ _' D0 [5 W/ k  g
  672.         for(i=0;i<240;i+=8)
    " G2 j6 m# S# d1 S$ h7 U5 A' U4 \( e) t
  673.         {
    ) \" }, ~1 G& \# W7 f6 R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) v# y3 h0 @1 X! A# I; R0 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, ~$ C1 c; n6 M0 }, K* L( U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! S7 \6 G, H9 g
  677.           Sleep(33);! U& c. j9 I9 l! M3 k# E' K4 {" p
  678.         }6 O+ S$ D, m% }: p/ F  `
  679.         Sleep(1000);
    5 k# f4 p# w6 k$ g) C/ H
  680.         for(i=240;i>0;i-=8)
    $ `# U' P1 y8 N) F  `6 d" y* ^0 g
  681.         {- G8 c$ A9 @! B" |, L4 P" P$ s( `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; x  [2 m* m5 n; e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% Q6 k0 C3 N, D$ S0 `1 }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 m" p% l: @, M( ^* x. P
  685.           Sleep(33);
    / B# m. h9 \  m1 [
  686.         }$ S7 l( _/ ]- m' |  m# O! `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);" }: r5 c' P/ C$ Q
  688.         dlg->ReleaseDC(pCDC);  w8 j& g' l  V
  689.         DeleteDC(hdctar);7 j; ]  P  p+ E! S0 J
  690.         DeleteDC(hdcsrc);
    & N! G4 \. Y! U; [5 D0 d9 a6 Y* c
  691.         DeleteDC(hdcorg);& |, m' R/ K7 ~5 P2 F, t2 D' S
  692.       }* m. S1 t+ u1 h/ p1 V$ Q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* Q2 R' k* [+ D. V6 _( E. J$ e3 v
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & ^# @" s- j7 w, m( z( c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 |6 X- L4 w6 o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 n& R7 v  B* W  X2 q1 x6 u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % N6 P! Q! _# o8 m. _" `
  698.       if(!Dn.Connected())2 B, J# N2 |! e' ]
  699.       {/ Q- [( ^2 [6 X- j
  700.         dwTotalFiles=1;
    . ?8 B6 X7 k0 K8 D
  701.         dwDownLoaded=0;
    , E; {; O" C- w
  702.         bSilentStep=TRUE;6 j3 u- ^& z- d( y; S: E. K
  703.         bCompressed=FALSE;& f; ?: L' z" ?$ n
  704.         strExtLocal.Empty();/ U6 \* o# y' V( f9 v4 M
  705.         strFullName="readme.txt";. q( a4 X5 s% v! z
  706.         dwProgramState=AP_CONNECT;7 N+ f/ n! L, W7 U! d$ y) x: B
  707.       }2 U) ~( m0 e& `# h3 ^$ P7 A8 R
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' D- `( e% |) [$ \$ E
  709.       dwStartUpSteps=2;
    2 B. F0 P8 n! [% @- f7 b7 n
  710.       break;
    , z1 i- A! \8 J( b- s4 T5 H
  711.     case 2:6 X% c3 g9 p0 \2 N
  712.       {
    9 e7 j: i$ K/ q# E3 H$ H( m$ I& j
  713.         int iEOF;9 T, D5 S5 R  I9 K
  714.         FILE *fp;! r# Z( F+ r, {/ A$ n4 \( {( c
  715.         char szString[512];8 w- v3 a; d( a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 Z6 L7 `3 o4 g  m0 |  |
  717.         if(fp)
    ; e$ A! W  z' C( y1 ?& \
  718.         {. \- v- m, I) R2 u/ e$ _! H
  719.           do
    # e9 `6 @6 ?8 g, \4 c6 W4 M
  720.           {
    ! }9 v8 s7 h2 i0 Y( x: Z2 i
  721.             iEOF=fscanf(fp,"%s",szString);
    " g7 v5 r- y8 N9 C! O! v
  722.             if(strlen(szString))
    + `! j  |5 Z$ T' l; ?( _! W8 d
  723.             {
    * ]" H' _! j  `& y6 q' Z
  724.               if(bFirstChar)
      e# \4 t  ]( y# V- L5 P3 _
  725.               {
    1 y9 T0 j" {6 E5 Y
  726.                 bFirstChar=FALSE;: f. f7 N: X7 u& D5 @, f& s3 T
  727.                 bConnectIsBig5=FALSE;$ L6 g3 A2 e: e' g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! g- q7 a1 k; G9 K5 K  w
  729.               }2 h( D9 E2 T1 X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* K; ]2 i6 x( a, B2 l+ ~+ n( v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    4 x8 W: ~. d0 Q& ^$ z
  732.               dlg->m_ListText.AddString(szString);
    : h, l4 X) J( @' e) N0 c$ R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 \& D6 m- O2 t: L; T, w; g% e
  734.               *szString=0;
    4 \4 K& g: q+ F! X
  735.             }
    8 y) G6 d8 o5 n: M% M
  736.           } while(iEOF!=EOF);
    ' D* q/ ?+ E' k* ^
  737.           fclose(fp);
    2 p5 x8 I: o6 g' h: m
  738.           unlink(".\\DownLoad\\readme.txt");
    - V# ?  z" A! g2 p; s" `8 }& Y
  739.           dwStartUpSteps=3;
    . o, m7 n! R4 O
  740.         }2 R" ~$ |- F. Y! h: j" E7 U
  741.       }
    7 V% L% p! k3 N9 Z& [
  742.       break;
    4 a, H: D0 G' ^
  743.     case 3:
    8 H6 v5 s3 G+ h5 j, R" r
  744.       if(!Dn.Connected())' A( }0 o- C* h1 v: e4 \
  745.       {
    ) w0 i/ R$ n7 ]! X  m
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      J0 L; P$ |! ]& A! V* N( j
  747.         dwTotalFiles=1;5 v' H( Y6 p/ ~) F( L( e" n7 j7 k
  748.         dwDownLoaded=0;# T2 V2 Q( ^. n8 I; K& u/ D& M
  749.         bSilentStep=TRUE;( A3 O/ u  b, ]
  750.         bCompressed=FALSE;
    6 L) f2 ]  j/ w' i9 I1 K
  751.         strExtLocal.Empty();
    # V: u( o9 q( K; i' D1 W
  752.         strFullName="checkversion.txt";9 s& F$ \) w' x8 h  X0 z
  753.         dwProgramState=AP_CONNECT;' I6 M/ a$ Q7 W& A
  754.       }4 a+ o4 L$ J# _
  755.       dwStartUpSteps=4;
    3 l8 c/ z1 @, Z
  756.       break;
    3 N6 [* R4 |( {  ~6 G6 L- Q( {
  757.     case 4:
    $ [. B/ V  [% j" e  m
  758.       {* l' Z! g4 Z/ S6 }/ {
  759.         FILE *fp;+ Y. \' K4 h6 l. i2 ?. E
  760.         char szString1[128];9 e8 ~0 t! z7 J1 v6 v. F% i: o
  761.         char szString2[128];' [9 A! n. {8 f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ y4 }' {* x# N1 P1 x
  763.         if(fp)9 d5 m3 \# g2 X" K4 I- C% t
  764.         {! G8 Z9 }) q" y, r; d. z
  765.           fscanf(fp,"%s",szString1);8 h2 v- Q  Y$ Y7 g, K
  766.           fclose(fp);4 e5 f5 a5 i3 h% X+ B3 |  Z- U8 U
  767.           fCheckVersion=atof(szString1);
    & v9 z( N1 N- V- s) C
  768.           fp=fopen(".\\checkversion.dat","r");1 d- b! h& ]& U8 Q' r
  769.           if(fp)7 T4 k# o) t& C& U' J3 r# P
  770.           {/ N7 A) _. p. P9 n$ l. G7 h5 c) y
  771.             fscanf(fp,"%s",szString2);+ S6 {, B& B8 q! w/ y+ }/ m
  772.             fclose(fp);; S$ W5 I( s8 P2 k- N% z2 x# |. A" |
  773.             if(atof(szString1)!=atof(szString2))
    % o/ E# I7 }  p& O4 W
  774.             {
    5 a! z! a2 _, ^
  775.               if(!Dn.Connected())* r+ _8 P. U9 k- o1 a' f0 H
  776.               {
      ~8 o2 n# s, Z8 ?3 D2 m8 Q
  777.                 bFirstUpdate=TRUE;
    2 |9 J' Y+ |. n) W. C3 v
  778.                 dwTotalFiles=1;* R2 ^7 c: y3 {$ V( y
  779.                 dwDownLoaded=0;
    4 y3 p! S, l6 M2 @& L% m& h2 c
  780.                 bSilentStep=FALSE;
    ! n) t$ B% c4 _- E! b7 ?+ B
  781.                 bCompressed=TRUE;( B% ^4 }9 f2 K7 N" _, _
  782.                 strExtLocal=".\\DownLoad\";
    : _: ^% O$ {/ Y5 k
  783.                 strFullName="update.txt";
    & S- [. r0 \' u1 ~( ~5 b+ u8 h+ Y
  784.                 dwProgramState=AP_CONNECT;# q& n  N7 j' d% R8 O" h& ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# `0 k0 [* z2 b) i! x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : z% M" `5 V, ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & w  c9 N& Y% b$ R0 _5 W9 \
  788. & t" r- j# ]% s! N  [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: `# {" s6 [! ^  f! d2 [: F. q
  790.                 unlink(".\\DownLoad\\checkversion.txt");7 v9 I) L: ^; `6 j0 w3 D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , X3 Z& j9 i2 b" N& y5 v+ D
  792.                 {3 J. t6 v1 T+ G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! j) `2 [# K! j- |0 i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, b$ h, ?  Z" R0 `' X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 \5 v; {. D" d3 z/ y" C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 o* o  D$ L: {3 g1 x
  797. * T% ]. }/ k8 P2 U8 d
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * ?2 _1 W" v, H+ s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , R3 [" D- C/ i7 D/ h! B
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 T" P9 E0 v* y$ n5 D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 q- m$ F2 c  d' M' X( S
  802.                 }. }. ]; b" O- \* \1 g+ r3 c7 g+ |
  803.                 dwStartUpSteps=5;
    3 e  b% F' P* r9 U
  804.               }& g9 ?9 `* U0 C1 N% S' e$ I  u
  805.             }
    - J: @  s2 |- h* ]  o* K' V. j" s
  806.             else7 B5 w$ Z* X* t; ~" ^& i
  807.             {
    ; f- c! ~% Q& |6 }+ s
  808.               unlink(".\\DownLoad\\checkversion.txt");# ~$ K5 b, ^: R  p5 D+ d6 G& T. j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 w. q7 I4 t; E( m9 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 T6 f5 V2 V  R' D6 x  X: ~% \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , Y' H) t9 J! `4 o7 Z0 {  ^
  812. & a9 Y2 {$ O5 h; W- g4 U& D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 ~  O$ r- U9 x# O; k" n" U' |0 v
  814.               dwStartUpSteps=99;
    2 Q0 L  o- H( ^4 a" Q& o
  815.               bFinishUpdated=TRUE;
    # @% Y; N6 w/ m
  816.               bCanUpdate=TRUE;
    + |' ^2 |4 _" z9 ~: J- D
  817.             }
    % O2 X6 R' J8 \2 i' Z) _5 t: z$ s- ?) z
  818.           }9 w4 ^( n# L) Z/ w0 ?; f
  819.           else( R% u$ A7 Y% k6 Y. K) o
  820.           {
    3 Q: y9 I# k  K- K" e. z+ I; l! C
  821.             if(!Dn.Connected())
    * f* P* g6 \1 Z: P' z8 }
  822.             {& ^6 R, g( o. j+ ?! Z
  823.               bFirstUpdate=TRUE;# A$ |6 e0 M% J& \: Y
  824.               dwTotalFiles=1;; f0 N( f& n" }
  825.               dwDownLoaded=0;- A9 r( q2 n. L  I5 O) V6 i2 M
  826.               bSilentStep=FALSE;
    9 l! U) T. A5 ^/ }# V# s2 H# i9 }; ?
  827.               bCompressed=TRUE;- G+ a0 a+ R$ k5 @/ t
  828.               strExtLocal=".\\DownLoad\";
    1 D9 W% o) S; {0 p- w/ k
  829.               strFullName="update.txt";5 r& U" @+ C4 N. t
  830.               dwProgramState=AP_CONNECT;" [( U# s, R/ D# e2 Z2 K3 }2 @) f
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 |& m4 x. H. l# O/ o/ ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " v# D3 K% [0 h( A( Q& r5 I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- y+ l- v: r0 J
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 B4 ^, t3 _3 c/ B
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ ]4 V; B  D; [% p: I+ ~1 t5 p
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" q. Z9 P1 M; H9 g0 b
  837.               {" o/ a! H& s$ a- J7 ?. N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 ?+ U" g* w1 m) V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ _$ L+ L; b3 ]" V
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) U/ E( [* |* Z% u1 m
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ^% _* Z3 X9 d5 D1 ]
  842.                
    " m: w# g1 s% l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - V( @- |4 |$ j& P$ I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , _5 z( P* x/ Y. s: s5 w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # D) _7 n  a& S3 E1 J( O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 i9 n+ F3 C  C" e% W, W) l5 \+ ^
  847.               }
    2 b2 Q) C4 V% k7 D) F* T' B
  848.               dwStartUpSteps=5;
    % U* e* c( d4 H/ f6 n
  849.             }5 @2 [5 D2 S+ w7 p; ]6 Q+ b7 R
  850.           }
    ( u: i4 n% u# A
  851.         }# k- |/ _. w1 r
  852.         else
    6 Q9 b- u! M2 r3 f
  853.         {* q' m8 ^+ e7 O+ O/ z1 g2 |
  854.           dwStartUpSteps=3;9 o0 W0 d$ o* |7 w
  855.         }
    5 G7 @; E2 e( ~, S- o
  856.       }4 c- P1 u/ s, n2 X: ]
  857.       break;
    2 S$ X9 Z9 y% m' E2 ?
  858.     case 5:! o$ l6 H/ e' N# _: y
  859.       {
    1 N) [% ]9 W  N7 d, t' `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! b% l0 S, O4 h+ j3 j; b. ~
  861.         {
    2 K( A4 _9 U( @7 ?- q4 G! Q
  862.           int opt_overwrite=1;( @+ ^4 Y9 _' ~, ]& M" y' X
  863.           int opt_do_extract_withoutpath=0;* ]' F8 b. N. v9 @* _- V
  864.           unzFile uf=NULL;
    / P2 v9 T8 s1 w

  865. 5 w* Y) n1 g! f- g8 F2 L! a
  866.           uf=unzOpen("Wsa.zip");; s/ C! w' v# }2 U
  867.           if(uf)* Q2 c  o- w( r5 H9 V) P
  868.           {) k6 h1 I0 F9 ^, L( x5 x& A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 o$ W) s0 e: D$ A
  870.             unzClose(uf);, k0 t% F  c( ]; {4 W6 o& W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# c/ _" _) }/ n3 g" ?$ `" G! {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");' S& K! z8 W1 U. f5 `( O# Y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' V6 ?/ l! c) P, a1 W6 I
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* b5 x/ u; o+ j4 v' b+ \
  875.           }; `5 a2 |8 r3 ?$ I' C" c
  876.           DeleteFile("Wsa.zip" );
    - G( f9 F4 T& K1 Q
  877.         }
    * n& z* c4 ^& {& p/ c/ J

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

. }7 M$ o$ u" C  ]" k6 q
) w" P! J  _: C  X3 O4 y0 F' F( H2 R

評分

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