CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ o6 K/ \# Z+ }
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , f% c  t- H: S* g  |
  2. //
    # l; k7 G% z; e/ d( f

  3. - G2 j) d- j, Q+ U( a' B
  4. #include "stdafx.h"0 l) F* c/ g; ]/ n5 |1 g* j; Q) B* M
  5.   ?6 U6 S; ^; A
  6. //#define UNICODE
    ( {4 n& K* f7 s. n/ V: _# `# O( F
  7. //#include <gdiplus.h>
    ! Z" L( E2 ?' H+ M, T
  8. //using namespace Gdiplus;+ @. }8 I& Q) a" w0 i! ~+ K: m
  9. , J. h5 T6 k" c% a
  10. #include "RevApp.h"0 o+ Z* R( R% p+ z; H7 _
  11. #include "RevAppDlg.h"
    6 z$ T( e/ r( M; u2 x1 k5 w

  12. . Z, r5 T3 I& h9 \
  13. #pragma warning(disable:4786)! K# w/ b1 ?8 w
  14. #include <map>
    6 i5 f4 e  j% g" p5 ^1 p! O
  15. #include <list>6 b9 N' ]; l/ @: X' S; i
  16. #include <direct.h>) O9 x: {( \9 n9 L7 D/ Y+ I$ u
  17. ; r% R! k3 S6 _" r2 V
  18. #ifdef _DEBUG! E% R# e, ^. O( \2 d4 e
  19. #define new DEBUG_NEW$ {, g1 L' p3 [. q. y$ B
  20. #undef THIS_FILE
    ; K/ E2 A7 Z$ \2 s! \2 J7 S
  21. static char THIS_FILE[] = __FILE__;" o! N- A4 l  G, l) y
  22. #endif. ~$ Z& w+ N3 @8 K
  23. #include "SkinResDef.h"3 |6 b8 b) q* G7 |3 ^) D
  24. #include "ChangeBG.h"! T; e$ y! i+ ?! g# t/ a3 n
  25. #include "AFXINET.H"/ H( p2 s% @; `' J/ J9 {

  26. 1 a! `" r. p; ~- i  Q% K+ m* V
  27. #define TRADITIONAL_CHINESE 0
      X/ i. E1 R) F
  28. #define SIMPLIFY_CHINESE 1  Q: ~  E8 T0 Z! I4 t- M
  29. #define ENGLISH 2! `  a' ?& H0 ]% O: Q% ~
  30. int m_iLanguage = ENGLISH;! z+ [, {, Y% ^, G& C( ]
  31. /////////////////////////////////////////////////////////////////////////////
      c: Q4 j1 s, H2 p' z# g/ [
  32. // CRevAppApp; y; X( u7 d! w' ~# N- U

  33. 5 T* a2 C$ e9 ~8 ^: }2 f1 t- J- s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) \0 h( s" b4 ~2 D/ T2 V
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 Y, |+ B3 k) S" t; g4 v
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% J" h3 {4 R; i3 V3 n' ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 j1 Z* ~( A( l( R6 p3 x6 ~
  38.         //}}AFX_MSG2 d" W% N, f. v, }' [/ \/ P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & D9 C3 L1 Z" |4 {; F7 C
  40. END_MESSAGE_MAP()! D* d0 y' ^2 T7 r( W6 u

  41. 0 y5 @" u, a0 g& Z: I/ ]0 w: J
  42. /////////////////////////////////////////////////////////////////////////////
    6 @/ h. |% @# G1 Z8 L- K: l
  43. // CRevAppApp construction
    4 V, f: k0 x4 p* ^8 O& M

  44. ( k! Q: c$ A8 Y7 r8 t
  45. CRevAppApp::CRevAppApp()* f, h' |- ]2 [1 L2 L
  46. {  L" C5 X7 `  K$ g
  47.         // TODO: add construction code here,
    ; E6 u- D+ X5 c/ C: T
  48.         // Place all significant initialization in InitInstance8 R8 ~9 a* S. s3 S& e+ m
  49.   bDisplayIsBig5=FALSE;5 b" a' q) c) {1 X
  50.   bRestartUpdater=FALSE;
    3 E# F8 z+ r/ G! {
  51.   bFinishUpdated=FALSE;
    : J& ], g, i* ^- X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ ~1 b7 W. \: T( X) C
  53.   InitChangeDataBig52GBKS();) W) O8 P6 q6 O
  54.   InitChangeDataGBKS2Big5();: l4 N, B. \0 @" P/ v$ L& {# v2 i
  55.         //8 f& ~! L' m: J2 G7 G
  56.         bClickRunExe = FALSE;
    ( a2 y4 _  y8 u/ a
  57.         //
    " L  V; a6 h7 T. @
  58. }% \# y" L9 Z5 w" n( `, C' `
  59. 5 G4 {# k4 o+ W7 m9 e
  60. CRevAppApp::~CRevAppApp()
    % k4 C0 c: s1 Y' }  D6 N8 d1 e
  61. {
    ) d4 ~; t: I6 G. C4 ^
  62.         // TODO: add construction code here,
    " \$ N7 Q& X; A2 l
  63.         // Place all significant initialization in InitInstance
    2 h% D5 o0 Z3 W& {! C. [5 k$ _$ m
  64.   EndChangeData();( y9 T% [! W0 p6 @) |
  65. }; R+ r' b2 `( U% C9 J/ t8 s
  66. * L$ X9 L0 q$ U! `& }. T$ y
  67. /////////////////////////////////////////////////////////////////////////////! t; E5 t# Z8 C% S
  68. // The one and only CRevAppApp object. e' \; G$ u+ W* ~/ g
  69. ! I. M+ ~, B- u
  70. CRevAppApp theApp;' ]1 W- W, @1 ?2 N, y

  71. - E) F4 |( b6 T# C8 |# Q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - c! M; k0 B! c, e, j; Z
  73. {
    / q( Z3 z# F: z& [2 s
  74.   int iEOF=0;  L% c9 [- s) J. q7 n! e$ T
  75.   char szTempName[MAX_PATH];* `2 a6 P& t3 }; ]3 v
  76.   *szFileName=0;& a! s* ]( d  p# C
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 e' R5 n9 n) `9 R9 {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 V, m3 q. F5 d6 q5 H
  79.   {7 S, R, H4 N6 d
  80.     strcpy(szFileName,&szTempName[1]);, i( F6 H& T4 p! j/ V8 ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)2 ]9 `9 Y- r1 h1 _6 J7 p- W! W
  82.     {
    3 l7 y) U+ g: E5 ]7 h8 H
  83.       iEOF=fscanf(fp,"%s",szTempName);
    4 Z6 x" s' M2 ]7 D" @/ {
  84.       strcat(szFileName," ");
    % x6 u. o( s- c; K9 o8 [
  85.       strcat(szFileName,szTempName);
    ! l5 r; m6 j( j( J* E& j8 C  A( t  e
  86.     }
    , K+ f2 Z' U! h4 l0 p1 Y! a
  87.     if(strlen(szFileName)>=1)
    ( V, p+ x: a3 f# R/ D  N
  88.     {* E) P5 _- P$ R  Z7 d
  89.       szFileName[strlen(szFileName)-1]=0;5 t& z2 ]1 z& w
  90.     }
    - r( ^, M0 w5 l- I. y* Y
  91.   }7 N. y$ J% n$ s7 A% y
  92.   return szFileName;" l7 P: f9 z: X6 y
  93. }2 [( v" l8 [8 z
  94. % j) ?1 w2 E/ y, v/ D4 x# n4 d9 i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# g1 f+ h* h8 n" \+ y8 P5 ~+ a
  96. {
    7 w6 e+ I' {6 N8 b6 O" D- X
  97.   FILE *fp;1 t8 A$ Q% ?" t0 S7 `6 G: z
  98.   char *key=NULL;; _# x. @" {! C9 f+ s1 [
  99.   char version[MAX_PATH];
    ) b( b$ L3 \2 h; ~. \) P
  100.   LPUPDATEFILE file,olds;
    1 [. J) A, |4 U" q, ?' S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( M0 ^" N8 X; J5 r& I0 _* }
  102. 5 u$ m* K6 G$ ^* c; p2 E
  103.   UpdateList.clear();
    8 n# Q0 e5 N, U0 q/ f
  104.   UpdateFile.clear();& P- ^/ [* v: q2 `0 M
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; F( ], g: s' w5 C0 y. j+ M
  106.   if(!(fp=fopen(filename,"r"))) return false;
    0 y: g& M, n* `- P
  107.   fscanf(fp,"%s",version);
    8 ]& Y! C% \% q3 k% k0 @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 b2 X4 p. r' e4 t
  109.   while(fscanf(fp,"%s",version)!=EOF)
    " L; ]2 T7 q( B) e+ ~
  110.   {% u# r1 Q8 H" A5 M3 q! ?% F
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; b+ V8 k. r4 X. v0 Q
  112.     fscanf(fp,"%s",file->path);
    " i7 ?) d2 ]* u. {: Z) V
  113.     ReadFileNames(fp,file->file);# j! o" ?2 c! n4 K( B
  114.     strcpy(file->full,".");9 X3 u1 F8 x1 M" z; w, b
  115.     strcat(file->full,file->path);
    & N3 q/ U) b9 G1 u. X2 T. y
  116.     strcat(file->full,file->file);
    8 s% ]5 c1 T: x. J# B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 J( _1 a: {& m! |1 Q0 g
  118.     {
    3 B4 C5 u8 G) l0 _& ]0 B0 r
  119.       file->vers=(float)atof(version);
    ; K* e& v( |9 w
  120.       UpdateList.push_back(file->full);) l  c; r7 u2 R- h: A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - n8 ]0 b& y$ T$ j* _
  122.     }
      e  ?, Z4 m; C* p8 ?
  123.     else' R5 n! X+ z# A& A$ ^/ D
  124.     {# D- ?1 w- y! V3 N) V
  125.       olds=(*p).second;
    . K% l# H# X  S  d( ]. r# `. |  G
  126.       if(olds->vers<(float)atof(version))7 ]/ m( m, K( t$ P- p6 C
  127.       {
    $ f! p0 t7 G0 C) E) M
  128.         olds->vers=(float)atof(version);
    ! f* A/ d8 g9 u
  129.       }1 @& {+ D- j: ]: k' h" g4 p
  130.       free(file);' ?0 M2 |6 n3 P5 W- ^
  131.     }
    : M, s  X1 W) J9 n: k
  132.   }" Z3 K, x7 T+ e( k" N, ?! t
  133.   fclose(fp);
    9 S  H& Z7 T, w# [
  134.   return true;
    : n* n; e/ H( S8 L
  135. }
    0 q0 I: Z5 C0 C) t

  136. 1 w( }& J, P8 ~3 e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' E: j7 A# l/ q: D+ ^
  138. {
    ( X$ Q1 |6 W* R$ P  }4 m1 \& N+ g
  139.   TCHAR  szFull[MAX_PATH];7 p/ ?; f8 J9 Y7 n2 M1 l4 a
  140.   TCHAR *token,*inter;
    ) z0 }0 a/ U4 f% z0 s
  141.   *szPath=0;
    ; A% j6 v0 `) L1 u" ]/ }
  142.   strcpy(szFull,szFullPath);* z; v; Z- N: q/ v" S
  143.   token=strtok(szFull,"\\/");. _3 S+ n/ F( v1 G0 g, q- L* B8 ?
  144.   inter=token;
    - h7 f, ]) a9 C& w
  145.   while(token=strtok(NULL,"\\/")). K! U( W( I9 v* r4 x! |
  146.   {
    3 K. x# n+ ^% a2 ~
  147.     strcat(szPath,inter);5 i/ r# O! p% B; `4 _
  148.     strcat(szPath,"\");" B- f+ [& w0 f1 s7 ]: |# a! b, I
  149.     inter=token;) q1 U! i" T" w1 C' ^0 z
  150.   }
    - v) Y$ ]2 A9 j0 I( |9 n, @- i
  151.   return strlen(szPath);; _7 O( e+ y; Q; h" |
  152. }
    3 `, d( s) [1 l0 S. z1 x2 M

  153. 2 f$ I: U5 `& y# {5 f- L: @; w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)( D* U1 X) @0 O
  155. {
    , ?  d% a) I  O
  156.   DWORD attrib=GetFileAttributes(Target);
    / W# I7 N  {( s" A- U# K
  157.   if(attrib!=-1)8 [; u" S' _3 b
  158.   {
    / \' K+ q; [5 t/ U8 M. r: u- f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); a4 A' M5 K0 \/ x; x5 o3 {) ~4 K+ r& w
  160.     {  B7 Y  k3 H7 [( e6 Q0 Z  O0 x5 c' }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# ?$ ~# u; ^2 v! b7 l' s
  162.       SetFileAttributes(Target,attrib);
    ; i- Y+ _# U5 f7 `; e
  163.     }: F; l4 v" `) W! p2 [2 l
  164.   }
    ( W& i  B+ j4 D9 k7 n& e3 U
  165.   CopyFile(Source,Target,Erase);
    0 ^! V. H5 b0 i
  166. }
    4 I" P: e  B3 P; X$ W; j5 p& Q( A

  167. 5 {5 w" g7 J/ }, I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * D  C8 O: q3 S% ~9 z3 n
  169. {
    ( v, `0 w- E1 R; m8 a3 M$ c
  170.      FILE *fp;
    $ Z/ V% \& l  Z; p$ n+ B
  171.      char  szBuffer[8192];8 f; F7 P# n' g, \4 f8 O' E3 w
  172.   va_list  argptr;1 E% \  u/ ~5 c2 r

  173. ! c9 p0 I$ V" e# C: M3 F/ L, ~
  174.         va_start(argptr,message);/ J3 p- `. Z8 Y/ B- l3 Y. k
  175.         vsprintf(szBuffer,message,argptr);0 t$ m4 ^/ J0 }/ P2 M7 Z* l
  176.         va_end(argptr);* y7 z4 G/ x. D, e3 E
  177.   fp=fopen(FileName,"a");$ w/ P+ Z8 [  N' E, a
  178.   if(fp)1 N& `4 c: s1 [& J- Q) \4 {$ D
  179.   {; O; {$ K- I0 f
  180.     fprintf(fp,szBuffer);& l. x0 _1 X& f
  181.     fclose(fp);* A; |; s. d% g7 z  H
  182.           _flushall();
    " q$ G9 N3 `! l# d* t/ k2 D
  183.   }5 d* m$ |8 ]8 S3 I& M* a  F
  184. }
    9 v; f- q0 Q* d0 `, f  l

  185. 7 n# a8 e2 I  R
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 K* B/ a0 g  k) e  V, |( z& h4 d
  187. {: F/ M' D7 @4 k! V
  188.      FILE *fp;
    " d  w  Z- |/ R% L: F
  189.     DWORD  attrib;1 K' \$ X2 L+ S0 X* F7 e6 D( N6 ^
  190.   attrib=GetFileAttributes(FileName);: v: m% u. h7 f# X
  191.   if(attrib!=-1)4 a: Z/ U: S4 a0 u3 Q# H. }
  192.   {1 |' I1 c' \2 {# c$ K
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 c/ l# _3 p+ f: l
  194.     if(!SetFileAttributes(FileName,attrib))
    ( c$ E9 W0 N% L/ u+ a9 w& a8 I
  195.     {
    / Q% a/ V8 `! ]4 z5 o8 T# W6 q8 o: L
  196.       return FALSE;9 {/ j' y3 l5 r* v
  197.     }' I* ?) e& l! m  \8 k0 ~: \
  198.   }9 d$ l, t  I0 j8 Q+ Z9 a/ L. A
  199.   fp=fopen(FileName,"wb");
    ; ?0 l3 v, q# g# H
  200.   if(fp)
    : i9 {5 `3 O- D- e) Q$ T
  201.   {
    0 e- Y1 U* l1 Y! ^, S! f7 K% h4 o
  202.     fclose(fp);* x+ W& o" q0 [9 C/ |7 t
  203.   }% e* }$ g4 [: C* f( z
  204.   return TRUE;
    - K8 \- L  r* i. p+ V3 I! h
  205. }# [+ e  D- n7 G
  206. 0 y& E% f8 e3 I3 X
  207. BOOL CRevAppApp::UpdateLocalVersion(void). y' j% C- f/ w5 W* S
  208. {
    7 X) B4 B4 I: `; ?+ ^& \9 u9 x
  209.   char filename[MAX_PATH];
    3 w4 i9 t" Y/ v! G# b
  210.   LPUPDATEFILE file,olds;
    3 c8 ^: o3 @) `6 m& L4 K7 G3 p
  211.   std::map<int,CString>::iterator i;
    & E+ Y* L; a2 [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 _* S8 f0 I0 o- T
  213.   std::list<CString>::iterator l;; |2 s' y9 j* L

  214. " R' d: u# Q2 p& w3 ]% F0 w) O
  215.   if(bFirstUpdate)0 ~) F, r: F7 E2 x5 M
  216.   {$ A/ n" ?/ e' N! Q* E  S" e
  217.     dwCurrFile=0;
    * y/ f0 d/ Z1 l" x" ]' l1 c! c
  218.     bFirstUpdate=FALSE;0 @) U) N( q" H8 d4 N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ R1 a5 t& ^" |) F/ Z  I
  220.     {
    ; E+ P- H' `& V2 v* q# i) E
  221.       dwTotalFiles=UpdateLocal.size();
    8 R8 Q& r1 u/ e2 [  M: {
  222.       dwDownLoaded=0;
    6 S- I' Z  ~' r* N4 h; ~5 _- h0 H
  223.       bSilentStep=FALSE;( y% G: w3 I( r  t- [$ S0 \# V
  224.       bCompressed=TRUE;# b* y; o2 V6 D7 H  p
  225.       strExtLocal.Empty();& _  W% o( h! O( N5 O8 \5 V( n
  226.       strFullName=(*i).second;8 j4 W/ d+ E' T0 u/ L" ?
  227.       dwProgramState=AP_CONNECT;# h) o$ R$ A$ Q6 u! i' ^
  228.       return TRUE;3 E1 p. T3 Y8 L6 B5 |0 p( h
  229.     }" ^5 y; J" a5 @% u9 @
  230.   }6 `& n9 \$ p/ l1 I; s( {
  231.   else if(bRestartUpdater==FALSE)8 [, s2 p+ w( `+ V. ^5 k
  232.   {( R! ]4 A6 l+ T. |! a# W! }0 Q$ E9 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; }; K! h( B( Y3 S$ u  R
  234.     {" k- u; \# v: |2 ]1 w+ p
  235.       file=(*p).second;
    . ^  Z0 z/ b+ ^, k5 {
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# x3 T3 C# r( z) \2 w2 T9 f* e
  237.       {
    3 @; w8 N3 I9 O5 h3 f: b/ L
  238.         olds=(*p).second;
    ; p+ X, }( f6 _3 s5 d5 J7 O; z
  239.         olds->vers=file->vers;( V5 u+ U- a: K+ p1 s) E( D  A
  240.       }
    # }* ], B. ~' g+ P! \& v5 \9 [- S
  241.       else: I! x. p) D6 Z- V) Q3 t
  242.       {
    % J9 Q( l( A, r" U. `% K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & k4 R2 ?1 D, M; y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" W( D. w( o8 |9 L2 _
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # x0 y8 e) ~  R) T0 n; ?
  246.       }: G: W+ N- k- J  c7 h; u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( R& w: J! Y% U' c9 ]% _
  248.       sprintf(filename,"(%s)",file->file);' _$ h3 p& T6 F& c0 y6 ^% u# F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; w/ }. t; J" O% i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! s* d* n1 z4 n3 F5 c
  251.     }" T% f. P) i5 {+ S8 e
  252.     dwCurrFile++;4 l. h, \0 [# c; {& R' M0 {
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! `9 X6 }  g/ ^% L* K6 [
  254.     {
    $ x2 G$ ?# r) F. ]8 ]+ S
  255.       bSilentStep=FALSE;
    ( Z1 B" V: B3 o9 Q: n
  256.       bCompressed=TRUE;; ]" T$ ?+ Q. l. {
  257.       strExtLocal.Empty();. m* U2 ~0 Y$ X- @' N0 h
  258.       strFullName=(*i).second;3 t0 T! m8 ]2 B& V
  259.       dwProgramState=AP_CONNECT;
      O4 v" X( ^- v: L! b  m2 i
  260.       return TRUE;
      R7 T! P, p* _: u8 O+ b
  261.     }
    1 S8 ?$ c( g, A+ A, v6 z  w. o; }! D
  262.     if(!bRestartUpdater)
    - z1 s9 r$ `# x
  263.     {
    . \+ ]1 Z3 n. O; `1 I( _$ Z% D
  264.       int iCurrSize,iFileSize;
    " ?' x! Y; R  }% g: o8 W! C0 A) i5 V
  265.       iCurrSize=0;
    4 Y. O, _& w, ~6 B) f
  266.       iFileSize=UpdateList2.size();
    8 ]' v7 U5 p% D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % p( s* Z4 T" x5 B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . ^3 i1 g) h2 {  e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");9 _! w7 ^" Y8 Z) g3 p; w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ~$ t  J4 V" i6 k# e
  271.       Fclearf(".\\update.dat");
    " k7 N9 z1 W) c% O% i
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 Q9 w4 `" h3 V. U: F# z! A
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! e5 M3 ^: p) p
  274.       {0 _; f1 M' M: K1 }$ D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())/ @) t4 |. ]7 {+ p. j4 l6 J. ]9 ?) B
  276.         {. S3 ~9 k$ q) J  G  N) o
  277.           file=(*p).second;
    ; n2 w$ H9 r, x1 q' S, A
  278.           sprintf(filename,"(%s)",file->file);
    + E0 ~. G3 U2 j2 r5 B+ J8 k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' X. @, v. J' H9 @
  280.           iCurrSize++;9 |7 M, u" S; P1 f5 V0 b; W( b* Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      b+ B& W- \2 K( R7 I
  282.         }
    + f+ N" H5 \7 W1 F: {4 f8 K9 d" r
  283.       }
    * x/ E$ O$ _% d. U6 D
  284.       unlink(".\\update.txt");
    ' ^2 [, ~4 X4 h
  285.       unlink(".\\update.tmp");& i" x& P1 Q6 d  u
  286.       Fclearf(".\\checkversion.dat");; a( ]' j' a1 Y- P  B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);, k5 ^1 l: @; f% k" m$ h/ {( M" T
  288.       if(UpdateLocal.size())
    3 z  H  P  w% v/ i* D0 [
  289.       {7 K2 v3 V$ i% \+ N5 r0 w
  290.         UpdateLocal.clear();
    . e% V! ?/ U7 C5 v
  291.       }
    # @* P! b! m' t
  292.       if(UpdateFile3.size())" C( Z9 L# o- s7 w: G- a
  293.       {
    - c! o2 z- H; k; i1 t/ m9 ]' ]
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 L0 N' |) @' D8 ~+ ]
  295.         {
    ; ~1 m& z$ U  k8 j6 o5 V
  296.           file=(*p).second;# v; o/ e6 X+ s3 H+ y! Z! |5 _
  297.           free(file);# E: M( O1 }2 Q- H6 w
  298.         }$ R9 s* {. U/ e3 I  y3 D$ N- @
  299.         UpdateFile3.clear();
    8 i* W) w% e3 M( j' K- b6 I& \
  300.         UpdateList3.clear();6 }0 g$ X$ Z  {( ]
  301.       }5 L- L- [' k6 ]# r' L
  302.       if(UpdateFile2.size())
    5 S2 M. W, e$ [$ ^
  303.       {
    ) ~: u6 @' F& B4 X6 r
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 `# C8 @3 }; t9 @
  305.         {
    ( J( K0 ^: R6 I
  306.           file=(*p).second;+ |4 P6 f- [. Q# g
  307.           free(file);) I, y! J8 S1 y0 {4 F
  308.         }
    % D2 i* Z/ k$ I2 W- x
  309.         UpdateFile2.clear();0 c0 C8 ?7 B* T4 I% k
  310.         UpdateList2.clear();" b$ }# G$ R7 U" S5 ~) _
  311.       }
    / h9 ]5 j2 [- J% v5 d; @0 |
  312.       if(UpdateFile1.size())( v* g# R3 ?5 N
  313.       {
    & ?5 ?. ^5 K. O  r5 x- E9 y) G7 c2 E
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 q& r# M  J8 D: F0 o7 J
  315.         {# p; t( u8 c* y, R
  316.           file=(*p).second;
    : j( c; G2 ]+ C) L$ N0 G0 o! C
  317.           free(file);
    ! ^; B5 o7 V6 V* q# ?3 Q" b# ]% Y3 S
  318.         }
    % R" V; `# J" o
  319.         UpdateFile1.clear();$ R) u. \( ?; T' ]
  320.         UpdateList1.clear();
    - d; c  C2 b0 Z( J
  321.       }* h! e( j' y7 g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / O/ ?) G+ }4 X) [; k  }
  323.     }+ [! [, D1 h  p
  324.   }2 n( ~; \9 h9 m- ]
  325.   return FALSE;7 C( O5 o3 Q* z8 q. [
  326. }
      X) \% P, x# p6 c* Y

  327. 2 O6 T9 m, G$ S! d2 K5 f
  328. void CRevAppApp::ClearAll(void)
    ) }- p3 H' ]  k4 ~1 N& D
  329. {& E  s# e$ q3 t
  330.   LPUPDATEFILE file;0 g' p' n0 @! e+ L) d- N6 z/ L8 @- W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' {4 x' K4 x8 n/ B, i
  332. , m7 e: o/ P0 _) n- B( t3 [
  333.   if(UpdateLocal.size())
    1 X  o/ a3 s7 s" z$ k6 i0 }
  334.   {
    2 i1 F! U2 D6 A7 W" A& j8 }7 c
  335.     UpdateLocal.clear();( D+ q; e& @8 C9 {4 {, j+ C! [
  336.   }5 L8 J9 i9 ~" L$ v9 J6 m2 z' g% g
  337.   if(UpdateFile3.size())" z7 d+ G8 A4 {& B
  338.   {
    1 y( w- Q, S. q4 t  O; a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 F2 Y8 w" {* w/ p0 V9 j* _
  340.     {- ?6 ?) `, O  k$ R
  341.       file=(*p).second;
    4 V, @# P0 q# z
  342.       free(file);4 h9 a# Y1 W2 v- W7 m/ h- U7 U% I& h
  343.     }
    % ]+ L- P  ~/ S& t
  344.     UpdateFile3.clear();0 g: S: y, u8 T% C
  345.     UpdateList3.clear();; K+ ^- H7 ~: c; m
  346.   }
    4 C. ], G" L# ^3 k
  347.   if(UpdateFile2.size())
    * s) f% L# R, C! `& F! J, i! M
  348.   {
    5 D0 s$ C+ b% ^
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 O# [  |" M4 h: j# V' P2 s# x9 j
  350.     {
    2 Q5 e& k0 e! }- f% m1 e
  351.       file=(*p).second;7 R2 t" J. n/ u3 d& d
  352.       free(file);
    . g/ l' z* h, K- L( j
  353.     }
    0 s% \, ~* Z2 n1 c. a
  354.     UpdateFile2.clear();
    7 ]* m; H* i; f+ a, h: e! J
  355.     UpdateList2.clear();( k; A- I. P: l/ q
  356.   }
    7 l- B1 V# f" V( [) M
  357.   if(UpdateFile1.size())
      V5 b2 m" K) i) X" N
  358.   {0 t/ g5 Z/ Y. f) T( o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + f; s( h; V) x% w. t3 T
  360.     {
    & S: r& E! M" B& U$ I! D; C% P
  361.       file=(*p).second;
    ' O- r) V; ]: Q2 e; s
  362.       free(file);* f+ n6 ]2 `8 s+ q
  363.     }( O8 D6 P8 b& C
  364.     UpdateFile1.clear();8 R& K2 {4 W' ]0 @
  365.     UpdateList1.clear();$ D. I% j* z4 h# z
  366.   }
    1 f9 j7 s* H8 `! q3 I4 b& T
  367. }  
      X, P7 W; ^( e  q
  368.   * T( n: X3 X$ n; Z* \" X
  369. BOOL CRevAppApp::CheckLocalVersion(void). B4 k! |& n/ n' Q
  370. {$ A. C5 c5 x# Z3 U: v7 b& y8 A
  371.   int c;
    # F6 y, A& H+ E% h  \
  372.   LPUPDATEFILE file1,file2;
    8 w6 {6 j+ D1 B9 d9 l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : w& |+ s8 D* h8 M
  374.   std::list<CString>::iterator l;
    * y0 g$ K$ A" D
  375. * |; d( h/ e. t" H! z
  376.   UpdateLocal.clear();" ?0 X. q( U$ W* {% ^- G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 O7 f2 V( |4 u* ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 l" v" J3 Q7 C5 x! v1 ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    7 l& U+ l+ [1 H' s8 P
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) i" J0 @% i$ v# @! L" o: a% o
  381.   if(UpdateFile3.size())
    , k: T9 T& Y5 U* u$ r
  382.   {& v1 A: E& D0 C3 Z8 `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , L: M% a& l2 \( K9 ~5 S
  384.     {$ `8 A; {: `; u9 l; g
  385.       file2=(LPUPDATEFILE)(*i).second;0 K! h1 \1 _" m# K( B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      Z3 N! M' M1 ~" H+ b
  387.       {: A% N# D5 l" m+ A4 a7 q
  388.         file1=(LPUPDATEFILE)(*p).second;* b# o+ C1 o7 M% }7 N+ c" T" J4 a3 z
  389.         file1->vers=file2->vers;  O$ s3 I- a; z/ c# k
  390.       }
    , Y5 C3 I6 ]2 Z2 }+ U' f
  391.       else
    0 b' {2 j8 d* y% {% n
  392.       {
    $ s6 N& W" ^4 R6 y6 z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 P- [6 j9 p( U8 ?% P( R% r: P( z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));4 Y& g: u& R: ~) t3 P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));9 d7 a$ B, P, E. m5 l
  396.       }1 `1 j" p4 g4 Y
  397.     }
    8 I5 i; a: p2 J, ]
  398.   }
    , s% J0 l8 _( |! Y% |+ D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 i3 k0 x9 W- U
  400.   {1 o6 i& @0 Q) m- D0 E. @% V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ _0 K- R! w* X# l
  402.     {3 {  C2 Q( J0 ^' J. s
  403.       file2=(LPUPDATEFILE)(*i).second;
    . a( |) m' i, Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ G4 v! Y) O# W9 m9 j
  405.       {
    & Q, G$ R. V: Y8 V5 U
  406.         file1=(LPUPDATEFILE)(*p).second;4 {4 ^: Z! @  x2 t
  407.         if(file1->vers!=file2->vers)3 N" I, q. {2 D1 O) S
  408.         {' S/ k1 W! N; Y. f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. V9 a1 h% W6 ]$ B4 t
  410.           c++;, S( ]+ g0 K, U7 V6 w
  411.         }
    % G7 {$ J$ _. ?5 b# }: M
  412.       }
    : e. o4 t0 Q; r1 V
  413.       else  X( C6 ?5 l9 D+ |8 W8 l
  414.       {, U% h8 v. V: N( @$ _" L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' C2 [+ ]$ f! D: k. s. C% r
  416.         c++;! |8 H. ^* Z. Z$ ~; E: I
  417.       }" S: |% `; v5 n- W5 y
  418.     }' a& z9 q* m  D4 H0 O2 d
  419.   }- c4 n8 o6 f9 O
  420.   unlink(".\\DownLoad\\update.txt");
    . S: j3 l5 N; C0 _8 Z! \8 S
  421.   if(UpdateLocal.size()) return TRUE;7 Q% S0 i# b" T; |. v) P6 p
  422.   else                   return FALSE;% t9 C, n. K% o% Y& a5 p+ Z
  423. }
    * t+ G4 `' P2 o6 [

  424. + K6 G" }) p; z# @
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( J( i6 `; L  e6 g1 H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 M3 y& O4 i1 w4 T- I5 M3 J1 q. ?

  427. ! f- Q& c3 H: f4 Z. H

  428. 1 |# u7 y% b+ X
  429. - E, h+ q! {+ C1 b& _
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " q9 G8 n8 k6 h$ u
  431. {7 H$ _! g$ Z/ J3 A! [# w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
      }0 I1 ]/ k7 x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 w3 z$ v: ]  k
  434.   {
    5 w- i2 [6 G$ \; q
  435.     char szLanguage[50];$ z" j% j/ m& j5 a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , B5 P6 e4 J0 |. g6 K! R5 m% B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ f8 _9 X+ y9 A: p/ E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 D3 f* a  K$ h8 k; L4 P3 p
  439.     else                                   m_iLanguage=ENGLISH;! X& F; x1 H( O, M% b" r
  440.     char szRegister[100];$ R6 x. Y5 K& Y( R& \- G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 }% a* l/ o7 n# y
  442.     strRegsName=szRegister;4 G! }+ |2 \" O7 m
  443.     char szPatchURL[100];
    8 C& z( `9 \2 l, S1 l, `8 V  g+ \
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  t# L% A6 [5 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 n) U2 p4 N8 x" }* C3 n' T3 Z
  446.   }
    6 \7 ]5 X4 k3 W+ M& V, s& {$ R' N
  447.   else" @7 z" Y( X8 R0 l
  448.   {0 z# o6 @; B) Q, H+ z: x- R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) F3 m4 c1 E% s$ q9 T7 h6 J  |
  450.     strRegsName=DEFAULT_REG_URL;1 v% P. [+ O4 }7 \' }1 Y3 l
  451.   }$ i, f- n/ T! Z+ w
  452.   if(GetFileAttributes("hosts.ini")!=-1): U1 n/ v  m  {: `) O* U: B
  453.   {
    6 t- A0 v2 }, I
  454.     char szIP[50];
    5 g. y& j1 y4 K( b# q9 S
  455.     char szDIR[300];
    9 a& \; N1 W% T6 e/ p5 ~% c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! T5 A5 k7 X9 U$ M4 y9 X' O2 Y
  457.     {9 \5 C: A/ a; n. `- w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ m+ {. }; T& J1 v
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 J7 @7 L$ N9 J5 L) u( z1 E0 @
  460.       strHostName=szIP;
    : k+ P% N0 r8 E7 I* p2 s
  461.       strHostPath.Format("/%s",szDIR);$ ?$ x8 P& @& n! G' d6 O- n7 A7 Z/ N
  462.     }( \9 _; n" u2 k, n, j. e
  463.     else
    6 g8 @3 R0 q2 I' R% x+ R6 ?# L
  464.     {
    0 A+ m) h/ W, z( j+ P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( a6 r$ }# j4 E; D) a* l
  466.       {  t, K+ z! J: }
  467.         char szLanguage[50];: ]5 U5 [* [$ I0 v) b6 i3 y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 b2 J- |2 S8 w5 f. Z9 Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. Q% ?& `: _' A( {6 w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 \  M4 N8 e- ?6 {+ r
  471.         else                                   m_iLanguage=ENGLISH;
    $ H3 W' |7 @# j/ {. `  {' L) [
  472.         char szRegister[100];8 L3 m. `$ r1 q5 h4 [' F0 R' g7 E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! Y$ f, W$ B! N5 U/ ^
  474.         strRegsName=szRegister;
    7 ?% A7 B+ g0 ?) }4 X+ p
  475.         char szPatchURL[100];: u3 ~! s: o$ {4 O+ z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* o0 b3 S. E" }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 j' x8 F% ?* k: {  L( [5 R7 [. y) |
  478.       }
    $ W" p! B5 ]( D; z
  479.       else3 Y) j& p. z. n1 t& ]
  480.       {
    4 c& I  m: R1 ^$ T$ O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 \0 B5 }% Z9 x6 o: e7 T4 f
  482.         strRegsName=DEFAULT_REG_URL;) B' d3 _0 @, s* e: V/ u) f3 Y( O
  483.       }
    . H/ v. J$ l4 r6 x! i
  484.     }9 ?1 ]7 D! m4 |0 O! ]$ i" P5 ~
  485.   }
      @" B  @7 w1 F* ~# j, s8 `
  486.   return true;! j7 v4 A. b7 C6 p
  487. }
    % o6 b7 f% [4 R- B, M, U' P' }

  488. # _& l, N  ?4 ~  o( E
  489. #include ".\ZLib\unzip.h"; c7 s& J# B2 x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# h4 `6 C8 O/ D6 D& t
  491. /////////////////////////////////////////////////////////////////////////////
    ) Z/ V7 M" \0 c: O+ Q
  492. // CRevAppApp initialization
    " K; h. y# d3 ]  y; n0 @3 @

  493. / j! l5 F& _; T  D0 K! _. n7 D
  494. BOOL CRevAppApp::InitInstance()
    4 ?! [2 U4 U7 i# [
  495. {
    ( `7 }  ]1 B5 ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 V+ b! K  P: N; d- P7 ]  @

  497. / D4 r8 \/ H- o* q3 E2 i+ p
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 u" W# v" F: J; U' S* g  {9 }) I& Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; X& `! V% f2 G9 T8 g+ k2 X
  500.   {" N$ b/ e! w9 K% b4 e" h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 I3 V7 M7 |8 J0 j! W
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. l' Z/ [7 d6 D+ d9 i% n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 j' ]. i, [) B8 H+ d; \
  504.     {
    6 S9 D, t# y5 D% e( d# X! R
  505.       strcpy(szPath,szPathTarget);
    7 R* C- y! c! `
  506.       SetCurrentDirectory(szPath);
    4 G  _) o( C, `  [/ q4 Y9 ?# m
  507.     }
    , T1 [) k* E2 @  q: O  Z# w
  508.   }% V  u2 M" y" g. g, y: D
  509. #ifdef _DEBUG
    8 U1 h: H  M' q; k% E6 |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 |' V$ P2 C! k7 W
  511. #else
    : ]7 L% b0 |/ o5 L8 G
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% M- S& p2 u* b5 x9 j  H- ^
  513. #endif
    6 z; \( L$ d& q- A9 P
  514.   {8 V& e$ j0 G3 _" d2 u
  515.     char tempFileName[MAX_PATH];
    7 `+ h1 Y. W) C- A+ P( b( t( ~9 P
  516.     strcpy(tempFileName,szPathSource);; X1 g& }% B1 @- S% e
  517.     tempFileName[strlen(szPathSource)-12]=0;' U' n0 G3 l- B- N  f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    1 w  E' m9 M) o% M' H
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. {! S8 o3 R+ ~/ O+ k9 A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 {+ b6 g9 M$ x3 F! Q& @1 B7 r
  521.     return TRUE;
    ) G3 U4 W) m/ A% _
  522.   }; x5 G6 O" E% `
  523.   // Nuke 0118: Delete run.exe% c" g' W' S2 ^/ J2 T' j, X& I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 J) J; c$ b: v3 D. G# x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 x  D$ E* b, x" \" R* c
  526.   if(!ReadCfgFile("Config.ini")). W5 r- f' B' G( o, ^+ v
  527.   {
    5 @% ?) B- y2 q. c8 E" H/ s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% Q$ n  j& B2 l  I
  529.     return TRUE;7 B2 A% q& P7 p7 `9 F) x/ D
  530.   }
    ' f$ t6 e; [$ |- _/ o: s6 c
  531.   HANDLE mutex;
    ! {+ F4 V8 r; z0 k& h. o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")); n: H+ G/ `) p( a
  533.   {+ \6 o' ?9 Z* Z% k3 C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 A, s0 X/ i5 U& U
  535.     {8 ?3 L- ]% i* Q& m) G! K2 z& ~
  536.       CloseHandle(mutex);
    & G, N+ Z+ K1 N3 ^- M# ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 R. o. \$ ]6 x0 n2 w# R
  538.       return TRUE;6 {9 O! k, L' {& \; B0 e! j
  539.     }
    2 u, W1 |$ k& f, D
  540.   }  1 {/ r) b9 L0 u9 B
  541.   CloseHandle(mutex);4 b% G4 V: O1 q) v( m
  542. , s  F, @. C) P# A3 g, H$ e. q/ J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " [/ D/ m# P2 P

  544. $ x- g0 G2 h, X: R8 q
  545.         AfxEnableControlContainer();
      F( n3 z  F- ^0 r
  546. + Y0 P5 e& r1 x2 _
  547.   bCanUpdate=FALSE;
    4 |8 r1 j" Q3 r6 o2 }! A
  548.   dwStartUpSteps=1;- w! d% n5 Y8 U2 j. o; T0 I
  549.   dwProgramState=AP_NOTHING;
    * `( n7 B" n1 K) g" `- a
  550. , V! i' I. [; U8 [7 F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 a2 A6 [5 ?2 e# A, p4 e
  552. ) ]% W1 e9 }' ?5 r3 X* h4 P
  553.         // Standard initialization- `9 O8 C* y! j: E- T# i* u1 N
  554.         // If you are not using these features and wish to reduce the size
    0 ?. p' X9 l& K: o9 t5 P6 o# i2 v# Q5 g
  555.         //  of your final executable, you should remove from the following. L; U$ M2 `0 K5 K! U+ N
  556.         //  the specific initialization routines you do not need.
    ' @' l7 e% K& ^( d; S
  557. % y  j5 }1 L3 v
  558. #ifdef _AFXDLL
    4 f/ ]7 t( g7 j6 h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 s3 h: K: Y/ c7 @) r
  560. #else
    ! }# Z, F$ o$ j9 H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 I/ n5 Q$ G5 `* v" ^
  562. #endif  I( m3 X0 i, i

  563. & b8 \0 e& {9 M0 C. f
  564.   dlg=new CRevAppDlg;
    " a; N8 ~0 Z$ B  L( V2 ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 I* N) e' C3 q& g- I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    4 L, K  W) q7 Z# h8 n/ r
  567.   m_pMainWnd=dlg;( f& @/ y3 k. s, O0 {3 ^. s

  568. + X2 ^6 d: v% J& n7 Q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    # m7 D# r9 j# V. d/ n
  570. . c' B$ V, L; }8 a, S* A
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # J% h7 w9 n0 v+ b. |7 v
  572. //  ULONG_PTR gdiplusToken;
    7 w; H9 D, L' X) t' R: E
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! |( O3 T7 b& o, F' v$ e, W

  574. : d: G5 [3 H. W
  575. //        CRevAppDlg dlg;
    ( B* F$ b  v. W  @: ~' j% b
  576. //        int nResponse = dlg.DoModal();
    : H- p  _3 e- A" u* t
  577. //        if (nResponse == IDOK)- U8 c1 Y5 A% k
  578. //        {2 {  _: }: N: z; y' g
  579. //                // TODO: Place code here to handle when the dialog is( O4 V; r7 K) H( L+ A1 z
  580. //                //  dismissed with OK* _' I3 Y+ L7 W
  581. //        }
    $ h6 q! N! }! l) n9 k
  582. //        else if (nResponse == IDCANCEL)
    - \  c0 E. K0 v0 e2 z
  583. //        {
    . ?7 M# E' N& k6 W% d4 U- O, b
  584. //                // TODO: Place code here to handle when the dialog is
    1 ~+ Z. j) V2 ~, w/ P' e3 e% i
  585. //                //  dismissed with Cancel" b, i0 ~; k* A$ J* {
  586. //        }
    - N" Q8 w& |) v

  587. * U5 v; i& e, W5 j* [
  588.         // Since the dialog has been closed, return FALSE so that we exit the, j' c2 F  `4 ]3 u7 y  ?* D! z4 m
  589.         //  application, rather than start the application's message pump.& G" l* e6 M0 U5 p
  590.         return TRUE;
    - q4 Q$ v0 J! \  D9 \+ s5 c
  591. }7 c" W% @6 }0 d3 Y
  592. 6 W  ~/ |) t# ]# O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" X* n& U* p: |! m  A2 `- }
  594. {+ `: P1 T/ t- ]6 `
  595.   int i;0 h$ Y# R. E% i7 |6 e4 u2 p
  596.   char *szRet;
      n/ Y  }  d6 Q' V$ x

  597.   v& W! J) N2 w& S1 q
  598.   if(pSource) { itoken=0; sztoken=pSource; }# l5 E, o, z6 l+ B0 C' @
  599.   if(sztoken)1 g: R3 D* V' j
  600.   {
    ; ^2 a' q6 [; ?9 k3 w5 o( f
  601.     szRet=&sztoken[itoken];9 C$ n) f; b; b7 z; U
  602.     while(sztoken[itoken])7 H' y8 T" m5 t# l& J2 v6 ~% E
  603.     {' O+ M4 T1 f; w+ c
  604.       for(i=0;i<(int)strlen(token);i++)
    ) z, S& O% n% w. h9 T; R4 F
  605.       {# @3 V/ U9 Z, p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    , m' T% [5 t+ p4 y. b! L
  607.         {; R. k. d/ Y) x( ?
  608.           sztoken[itoken++]=0;
    " `3 i$ j: }; K
  609.           sztoken[itoken++]=0;" C; X) A; A. d9 `
  610.           return szRet;
    % G) t4 U5 ]; N# S2 Y0 e; m
  611.         }( [; W, m1 A. Q, D$ a) U$ p6 |
  612.       }. Q7 q. N( g1 m5 s, {0 K
  613.       itoken++;
    9 D. c' H3 Z7 u  ?5 P, F+ t- t; F: Z4 y
  614.     }
    2 C2 u, K, H  r% B# M
  615.   }
    4 P: S% ]: i( c, U6 ?* I
  616.   return NULL;1 ^" q& P$ A' _1 g, A9 r
  617. }- Y% A! l) q8 R( m" \1 u! h2 G

  618. ' i/ H  S( P% R4 o8 {. d
  619. void ProcessProc(long Total,long Current)
    ! y! A3 O. [/ k( @- c
  620. {) Q$ u5 ]  c9 V7 c9 K# _$ y
  621.         MSG msg;
      s' b: G1 U% j! ^* s1 K, }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 N9 v* G9 H, J( N/ K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - O# \# J$ w1 n2 w( J) J2 \8 s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))  _5 }0 F* s0 U' {  ]% l
  625.         {; g/ W6 w  z7 D/ C
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * B2 k5 Y6 V/ n7 x' v
  627.                 {6 m9 i/ T' d, Z
  628.                         return;8 u% f! R: e! g: W4 m
  629.                 }
    ! x( T0 D0 _# R$ r: c' ~( E
  630.                 TranslateMessage(&msg);
    : ]  G) |) {0 V9 m" O
  631.                 DispatchMessage(&msg);
    0 V. I6 q" Y9 i) N
  632.         }       
    5 Z% P; g2 `9 w8 y7 f
  633. }
    8 w% ~5 L; E1 r+ W8 k/ y

  634. ; ^6 T: K- V4 Y7 _; ~& g1 j, }" Q5 }
  635. BOOL bFirstChar=TRUE;  D- j  F, J. f3 r. K: r# C
  636. $ H# F2 S+ J5 k3 ^1 L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    + Z; r/ E' `- h! F: ~0 _
  638. {
    6 ~- n, W8 X  j7 \, G% v
  639.         // TODO: Add your specialized code here and/or call the base class- _5 W! F3 _# [% t5 y' d4 [' e  O
  640.   switch(dwProgramState)" L  M0 Q1 x8 _( Z4 q7 a
  641.   {# Z; Y7 ?( k7 I& y: Y& S
  642.   case AP_NOTHING:
    ) P' c& m% U- n; k  }" o0 m, d7 C
  643.     switch(dwStartUpSteps)# u- t" U0 v) z# O3 |% M2 T; d; o
  644.     {
    6 G: ^. v% j0 b  H
  645.     case 1:
    / a/ c1 b: Q. i9 c. {# f# ]
  646.       {
    1 ]* }6 P# V3 x
  647.         int i;
    6 u2 _8 L) I# C: ~2 {
  648.         CDC *pCDC=dlg->GetDC();5 q- p6 t7 S+ b: [1 F! L
  649.         HDC hdcwnd=pCDC->m_hDC;# c) e5 a( p" Y& W2 D) N' e
  650. //        Graphics graphics(hdcwnd);' j: A2 p/ k% j6 o3 X" _0 G* u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- b! X- Q" u! I' U, h' ]
  652. //        INT iWidth=bitmap.GetWidth();
    ) T7 r$ b% _, h# k! |7 B
  653. //        INT iHeight=bitmap.GetHeight();" m" ?" E/ z: p/ Y/ Q& [- \
  654. //        Color color,colorTemp;
    ! `% m& C+ S/ p- G! L9 ^8 s" ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    - K1 |$ l8 O5 s% w6 h2 ^% w% p% c& z8 D
  656. //        {# Q; Y' y- `) x1 u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 u6 Z+ u% V. G8 A; T$ z
  658. //          {# A( s- E* M3 M* e0 l0 ^) ]* `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 m7 v8 A# N/ R% l5 _
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! v2 d4 m2 m- r( a7 }
  661. //              (BYTE)(255*iColumn/iWidth),/ q* E7 B& S5 v) t4 ^+ g) `8 h
  662. //              color.GetRed(),
    + R# [% o+ `& Z2 }, t8 J
  663. //              color.GetGreen(),- h' o, i. Y$ H9 @: f3 d
  664. //              color.GetBlue()));
    & D% F3 w; `- R' x4 {+ [7 P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - z8 ~$ {7 X* o  Z! o
  666. //          }
    . i% f* f' @' D7 P+ N
  667. //        }
    # ?& {5 r4 {. _& |- o( G! t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 {  Q6 k0 E$ R% c0 p; K
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. o( }2 W' x+ q/ L4 e. j
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + l# e/ P: u# K% B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " L) b& d) `% R3 ]
  672.         for(i=0;i<240;i+=8)/ \+ y' ]" W1 [3 K% \
  673.         {: D1 y2 T" g" k, @) d/ W- \
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 H8 l% k% O7 \7 @$ N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; V) c- B- u) w. Z) O  \2 n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; M) N+ `& x* h, s0 G! G8 C
  677.           Sleep(33);% k8 x% C9 l" M6 ^1 A
  678.         }
    ' d. o  O, V5 i  Q! b( i
  679.         Sleep(1000);  @+ l3 g5 n( T8 K. K
  680.         for(i=240;i>0;i-=8)
    ) M- _4 K& |, R. W: `
  681.         {5 Z2 p* k/ ]# D2 p& o1 R, S
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 u# [5 u/ `: F7 F9 G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; E" @  b6 Q/ x/ E& n# ]4 u9 v# J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # [/ |( o0 y8 J1 j& h4 f
  685.           Sleep(33);
    * ?8 q# a4 Y, I7 {4 c& I! D
  686.         }
    9 r' }) f8 Y  |' q" B9 c
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( C; `9 u) p2 L. G: X; T+ |
  688.         dlg->ReleaseDC(pCDC);
    - U' U7 V  s  o( `
  689.         DeleteDC(hdctar);5 _% j- d" b- a
  690.         DeleteDC(hdcsrc);
    & }( b2 l/ }5 c4 S
  691.         DeleteDC(hdcorg);" F( G+ l7 A4 v2 i! u/ F
  692.       }
    4 k( G9 \1 ~- q! V6 e, c0 X% s6 s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & y6 s. }" Q- V5 p2 T
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' E) S5 V. o# ?4 S) ]- P7 J7 I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! l) N' L. y5 H. x. y! W; J
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    / G6 G' ^+ P6 r' Z8 ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ x( t8 H8 S4 I. `5 V+ n: d1 l+ q
  698.       if(!Dn.Connected()): I  S, E/ T. `5 Z! O. U2 q2 G- z
  699.       {
      y- N. j- b6 o7 }
  700.         dwTotalFiles=1;
    2 \/ h1 ^& w6 v; m' o% M+ _! y! Z
  701.         dwDownLoaded=0;
      `: ~% Q8 O; h" |: f" ]
  702.         bSilentStep=TRUE;9 `3 D/ q4 j" |4 ~& E5 n
  703.         bCompressed=FALSE;# Z, y! K7 Y4 _. ]; l/ c
  704.         strExtLocal.Empty();" m1 u$ c$ |0 [5 h! E. d
  705.         strFullName="readme.txt";- a& |8 ?! m* i+ G4 D0 X2 \, f) p
  706.         dwProgramState=AP_CONNECT;
    . r0 K. C+ ]( m% k6 X
  707.       }* H9 n6 r7 l+ k7 W1 n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. `6 L8 T& d' A' B# Q
  709.       dwStartUpSteps=2;; t. d1 v9 M# K" R, R( c
  710.       break;
    & g, n( i' M  Z# b& Y
  711.     case 2:
    ! G" f0 O/ _; l! t- _) L0 [1 C4 P
  712.       {/ c3 C1 b8 `7 z9 B7 `
  713.         int iEOF;
    ) P, s& h; c7 d' S0 n; N
  714.         FILE *fp;% A  S5 E0 G+ H+ \. f
  715.         char szString[512];2 A% E: A/ x8 h7 O: {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: a1 r  D3 g- A
  717.         if(fp)2 Y  P+ H6 p4 W. l8 o3 M! {
  718.         {
    " ]* T3 ?. B; P3 m
  719.           do
    ( s  i! X! g1 c4 P$ C9 y
  720.           {
    / \6 a# G3 N( C) E5 J
  721.             iEOF=fscanf(fp,"%s",szString);( ?4 y* @/ G. v4 y/ ~
  722.             if(strlen(szString))9 @" x4 D$ ]0 f  l% q
  723.             {
    ( j3 I/ p8 w& R8 _2 F
  724.               if(bFirstChar); Z7 @1 u" P2 d" \6 |% x
  725.               {0 j9 L" V. M6 ~( d8 V; z3 ^0 h
  726.                 bFirstChar=FALSE;, J4 J( a5 ?( m  k- t; W& B
  727.                 bConnectIsBig5=FALSE;  S# }/ j) }+ }$ t% n" p' I$ z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 m% b4 ~% ~  R- c+ v/ x4 w2 U3 ~
  729.               }- G0 G& n, \7 f# V' ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    * D! y( j6 V; q& c( ^+ N( T$ T' f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- ?- i  Q7 J1 C' x3 r7 a6 e
  732.               dlg->m_ListText.AddString(szString);
    - n1 V5 D6 Q. d- Z7 {: s" b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " L( r  `  _: I$ u; A
  734.               *szString=0;0 f( e/ X6 p' ?& ]; h, b
  735.             }
    : Z- l  k+ z( ~+ s( R& b
  736.           } while(iEOF!=EOF);
    & C  B" @2 W! }! @# h9 P
  737.           fclose(fp);
      ]* O" j  }5 N3 l7 p7 c' S
  738.           unlink(".\\DownLoad\\readme.txt");- R- a( b. M0 ]3 u
  739.           dwStartUpSteps=3;2 M: @- \' u  d4 {% h/ C
  740.         }# n! b  i- @0 N& {; y, F  C" H
  741.       }* L4 J' G1 S7 L( E! O
  742.       break;  c5 Y; M/ K3 F) V$ L3 i0 N
  743.     case 3:% f5 H" o) M6 P2 g5 ^
  744.       if(!Dn.Connected())
    ! o* o: ^' T1 B. S! O8 c; G9 y
  745.       {$ h3 M: V2 x  l& @5 n& m
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . p# \* o/ E  m* c& b4 {
  747.         dwTotalFiles=1;
    4 e1 Q) ^  s7 E
  748.         dwDownLoaded=0;
    1 M* V* N6 x7 m: v9 ^
  749.         bSilentStep=TRUE;: G. y3 n5 ?8 i) P" C% [
  750.         bCompressed=FALSE;3 _8 i% q- v/ C2 T; _6 i  X" {
  751.         strExtLocal.Empty();
    + j  C1 H5 O+ L# C3 `' i( b7 r
  752.         strFullName="checkversion.txt";& R7 w* x) [3 K$ a& u
  753.         dwProgramState=AP_CONNECT;! V  ]6 K( ?. T- \9 q
  754.       }
    & B$ N3 A6 T/ c+ A
  755.       dwStartUpSteps=4;6 Z  U% s& b3 n  ?8 K' U
  756.       break;
    4 o) V( @- D% t- [+ P1 H1 J, x0 T6 F
  757.     case 4:7 k, {" N, o* ^5 `
  758.       {
    5 H% r$ V' h  J% m9 j! P
  759.         FILE *fp;
    ; a* @) v1 \2 Z) a- N$ M3 l
  760.         char szString1[128];
    5 J* I; f1 {1 L( F
  761.         char szString2[128];
    . U2 F1 R, M2 p5 n% B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");2 U, Q* F7 s3 N9 [# d
  763.         if(fp)$ W  B5 l6 b! c" Y
  764.         {
    + g3 n" k0 w6 O, G1 @
  765.           fscanf(fp,"%s",szString1);+ B. g2 m: \& ~& T8 j
  766.           fclose(fp);; O: ?( q$ r- M% I; C
  767.           fCheckVersion=atof(szString1);; }3 g4 g# I* T: q8 `5 k# e
  768.           fp=fopen(".\\checkversion.dat","r");/ {5 d3 _8 w2 T
  769.           if(fp): r' a3 W5 ^* z# ?% |; e" U
  770.           {; t4 k; R' p; L; a. n5 \8 l' b1 L8 t2 Z
  771.             fscanf(fp,"%s",szString2);
    7 ], I. u; B2 U- Z# T* {
  772.             fclose(fp);
    4 f1 `  t# d. p' J
  773.             if(atof(szString1)!=atof(szString2))
    & X4 b; Y% z* p7 W0 j) Z% R, V/ K+ J
  774.             {
    0 T' m' K# j$ a: x) q. B
  775.               if(!Dn.Connected())
    $ |" S* W, A# v. a0 p8 _; _6 h6 d
  776.               {
    9 f' C3 r$ g6 B( m2 K
  777.                 bFirstUpdate=TRUE;3 J7 @# T" b* F  R) X! q
  778.                 dwTotalFiles=1;
    0 L& K( ]1 c2 f. e; k5 n2 Z9 [& n
  779.                 dwDownLoaded=0;
    * ~9 y  d% v4 @7 o7 W
  780.                 bSilentStep=FALSE;7 Y+ O& Y$ t4 q( n6 ~1 s6 [( f) B
  781.                 bCompressed=TRUE;
    - ^- x6 |% o0 P- S( J1 j
  782.                 strExtLocal=".\\DownLoad\";
    . k' P8 B* }, [( E9 }) Y
  783.                 strFullName="update.txt";
    2 E5 G, F5 M/ q8 c/ w9 ^
  784.                 dwProgramState=AP_CONNECT;* E: G* v7 J4 G1 ?& f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% C/ z3 D# W! y! W9 j+ k2 {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 b4 z' h; P5 [& d4 L
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * y8 f. o  A8 I, I# I7 l

  788. ( |$ x9 h6 @# _1 k0 ?. |) D, p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 {" ~; [4 \$ z  m4 n$ R+ }
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & |  H8 u) ^# x  S/ l4 B
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; n6 e1 H3 t5 k/ ]: X0 G1 A/ f
  792.                 {- r. |* G# a% K" ?; S+ v; v7 r* y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 c- {7 t9 B4 v0 O/ w' ^
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 n9 d, S! ?4 l
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : v6 L  V4 P0 P9 S" g! S
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ x& M2 B$ u# C0 O
  797. / ^. U. V+ d& b
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 h( j) O* c  n3 q. B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ Q) `; R! U/ I7 Y2 V) b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( x' ?! m, n6 c! J1 }# P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. X1 C( M0 m: I" Z( P+ P
  802.                 }. P" m3 S0 G/ j* \: _* B& r
  803.                 dwStartUpSteps=5;4 B7 s( Y% P+ @: z+ l# _
  804.               }
    . w2 D- x- `2 O
  805.             }
    4 ~* \1 `, |( F( g/ c$ H# O# S; r- I
  806.             else
    8 o/ ?" u* F4 s3 n
  807.             {
    . U$ v1 f2 k0 b2 l7 T
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 n! x$ T5 R. w* g0 i+ b  L
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: j4 [6 L7 ?, r# Z3 @" s  W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - Y% g( H. C% J5 l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 ]7 o& C5 m: r

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

& C1 d' P% h& H% X! r; q) H0 n+ Q. R  d7 Z; q

評分

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