找回密碼
 立即注册

CSUpdate.exe源代码

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

, Y; M+ l. K6 _9 f% E( f0 J
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 x4 n0 O; Z# M& K' Q- X+ Z( D
  2. //
    : A" V, R2 r! M- t: |8 J: H" O2 S

  3. ; S( M3 I9 C; v
  4. #include "stdafx.h"; ?% U/ d7 R, s- z% y/ `8 D

  5. ) N  c! _* }, M* F! y) T
  6. //#define UNICODE: `  t: Z+ ]$ \+ [
  7. //#include <gdiplus.h>1 r, w5 J$ z" Z3 Q( b' m* {( B( {- t
  8. //using namespace Gdiplus;- D0 {; l* c/ [2 M3 {$ l

  9.   l8 a0 q6 N4 O6 l
  10. #include "RevApp.h"
    ) [4 e) ^6 u7 N4 y7 n
  11. #include "RevAppDlg.h"' R% J0 D8 ?/ C7 e, |* Z/ o

  12. / I' F0 s; N9 W2 I% n% Z
  13. #pragma warning(disable:4786)8 k( ]$ B% A5 L2 D
  14. #include <map>
    . A6 m4 f; \2 s  a( U5 x2 \) g5 g: W
  15. #include <list>) i5 q$ H, S6 F$ X0 k
  16. #include <direct.h>* I7 o' }+ n3 d
  17. 9 ]+ \8 I# s) l
  18. #ifdef _DEBUG
    1 o& V1 @& y7 w+ h. J
  19. #define new DEBUG_NEW
    . C! F$ c4 {* N6 U+ M
  20. #undef THIS_FILE9 S( ^1 ?3 y* O6 \, |  z
  21. static char THIS_FILE[] = __FILE__;
    7 W9 ?8 B% _; E# E( `. O( j: N
  22. #endif
    6 B6 q1 {& t- \1 r, H
  23. #include "SkinResDef.h"% R6 j0 }' X( }  l( j+ `1 ~
  24. #include "ChangeBG.h"
    : y% {/ u1 c2 ?. q
  25. #include "AFXINET.H"
    / |+ b' G& e& f1 i
  26. . N! P3 e% \$ s: _
  27. #define TRADITIONAL_CHINESE 0; [, J; y: K: U
  28. #define SIMPLIFY_CHINESE 1
    0 z6 O5 i  q' b
  29. #define ENGLISH 2
    6 W* u0 R. W, x% T, K3 W# m+ N
  30. int m_iLanguage = ENGLISH;; b3 Z; Z0 a8 ?
  31. /////////////////////////////////////////////////////////////////////////////
    ) F2 [4 V+ `2 r& I9 w0 K
  32. // CRevAppApp% `9 u( i$ I# ^3 |& b
  33. % S) {) l7 {- S* r/ s& X, d9 A$ y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' Z( w4 }* d2 z; O& q2 P; E7 j8 R
  35.         //{{AFX_MSG_MAP(CRevAppApp)' I6 M( ]% B: s0 h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* b1 P$ e/ S& _% \; Z+ m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 z" s9 I) F0 z5 v# q  b, L+ f' b
  38.         //}}AFX_MSG2 z; L) ^/ `# C; e
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): `3 J, T1 |* t% N4 g2 C* J
  40. END_MESSAGE_MAP()" t& e$ `% {- |5 N0 S5 l' Z6 \' t, }
  41. 5 T: }8 N  q9 Q" h/ H' n) I4 X. V
  42. /////////////////////////////////////////////////////////////////////////////
      A0 `8 p% b: v# e! U) p' q
  43. // CRevAppApp construction' ~6 w0 ]( x3 W$ N9 z
  44. ) P  E  a' D9 Z, ]1 ^0 m  g) o
  45. CRevAppApp::CRevAppApp()
    2 N& v- z, M; r8 t2 A* g& K
  46. {! F4 W6 \6 i, F7 V6 a
  47.         // TODO: add construction code here,
    ; p5 [2 G+ M2 l4 x
  48.         // Place all significant initialization in InitInstance& T! f) Q8 U2 C( @5 @3 V% {4 o$ e2 L
  49.   bDisplayIsBig5=FALSE;
    & t. [" W- e( T& g( R, r: P
  50.   bRestartUpdater=FALSE;
    * f$ m3 a( N0 _1 [
  51.   bFinishUpdated=FALSE;3 z0 P( B0 t9 D- N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - j) ?; L. M' A- t- m0 x, x
  53.   InitChangeDataBig52GBKS();4 k# d0 @4 I, m* K) A4 E
  54.   InitChangeDataGBKS2Big5();
    # V2 g: m% P: s
  55.         //
    8 r$ ?- \; }- e5 V0 j, A* Z  f
  56.         bClickRunExe = FALSE;$ X( E. ]7 f& e1 w5 d, w( f, q
  57.         //% R6 h0 p" K* Y' ~7 r9 H
  58. }2 c6 t4 O: V4 C
  59. : X" y9 {, T& _& F  K$ a5 g
  60. CRevAppApp::~CRevAppApp()
    # Q4 d- n: W( |% G* P" f: X& \# q0 r
  61. {
    8 j5 f4 D- W5 _$ A- V# I2 R  C# W
  62.         // TODO: add construction code here,7 _4 U+ x# S  q2 a2 ^
  63.         // Place all significant initialization in InitInstance
    % Q, P' Y! |& t7 R
  64.   EndChangeData();
    . `; e1 V/ o( q# X8 S
  65. }
    3 C& f0 {; u. @' H% V+ ?# j
  66. 7 ~; p7 ^$ y8 E5 M
  67. /////////////////////////////////////////////////////////////////////////////6 L6 ~4 @7 h8 L) K5 q
  68. // The one and only CRevAppApp object( T' r: e4 v- y8 d0 G' y/ h; |) ^
  69. $ B( C4 K- `' m% @9 g
  70. CRevAppApp theApp;
    3 v) P6 ~+ k# M! l9 S5 T" S

  71. 0 |5 x- Y9 M6 g: J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); ~! \3 C: o& A! y2 w
  73. {$ e& @4 H! p5 Q% r/ ?, c& A- `
  74.   int iEOF=0;
    & @: t) g2 R' n; i% p: d
  75.   char szTempName[MAX_PATH];* N) b, o) @  l+ m; [
  76.   *szFileName=0;, W1 J: M/ N. G
  77.   iEOF=fscanf(fp,"%s",szTempName);9 u0 m0 o3 x2 G& H# r# _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " u1 o' C  k  i! V) x  Q
  79.   {
    0 A4 @" }0 D" T
  80.     strcpy(szFileName,&szTempName[1]);$ ]4 d5 m4 u' G; b. A6 {  [
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! [5 j7 R, g2 y$ \* f8 U9 g6 s, @
  82.     {
    - T4 k1 C& e% \4 f$ N" C
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , G8 u; j" n, P" e
  84.       strcat(szFileName," ");% \* K/ j) ]) r: b& `
  85.       strcat(szFileName,szTempName);- }6 |' n/ Y( Q  u% P4 w
  86.     }
    % F: ~( Z) t* u$ x7 E
  87.     if(strlen(szFileName)>=1)
    9 w$ H  s% t, G' L- s  v% R
  88.     {+ z6 T; j# @2 f! d7 V8 b, V
  89.       szFileName[strlen(szFileName)-1]=0;
    & y5 p  v$ J. j3 b- L1 i( o+ W
  90.     }+ c5 i0 N( e; @# W
  91.   }
    4 J/ o% s; j( S7 \! n0 S
  92.   return szFileName;
    ; z& @& l8 z& S% l0 y( l
  93. }% k0 U) n4 g' N( T  o

  94. # x' c9 y. s) h0 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)1 {9 k* f7 f$ |% x
  96. {$ Z+ |5 O# `% N  d3 R: r( [& }
  97.   FILE *fp;( _: ]) c& N" h6 `# d
  98.   char *key=NULL;7 c  c. \% A" A7 h/ p( r
  99.   char version[MAX_PATH];
    - Z1 j  ^3 r* z; k
  100.   LPUPDATEFILE file,olds;9 i4 s/ `, S7 s' o: y& m1 i1 x0 \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 c9 P: Y- H% u! ^" N" N' P
  102. ! |0 T7 K' h8 X( i. B. g5 P" _( z
  103.   UpdateList.clear();& I( o* `9 P- F/ E; @+ g
  104.   UpdateFile.clear();
    6 }! n# [1 |& o- c
  105.   if(GetFileAttributes(filename)==-1) return false;& c  v  S) l% q" `4 g5 E# i- s
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * q7 x+ k" e6 {5 |& \( X; n
  107.   fscanf(fp,"%s",version);
    $ x. z+ h2 a8 x1 i: q& w8 v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - l0 o! Q6 C) w1 a5 t/ Q
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - @3 i- R7 k# S  s7 X9 {
  110.   {. |, Z5 f  _- k" y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ F) V/ d! j, `" a% z/ S8 f
  112.     fscanf(fp,"%s",file->path);
    ) Y+ a. y& G; W
  113.     ReadFileNames(fp,file->file);
    0 Z' C* a9 r+ p. K
  114.     strcpy(file->full,".");. V7 n9 x# i+ e! K
  115.     strcat(file->full,file->path);
    9 Z' W4 ]6 ?$ b$ |9 X4 O
  116.     strcat(file->full,file->file);
    ) W' d/ s+ a2 P3 t3 z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 @" k# l0 u9 Q
  118.     {
    % Z! N# S* j- V  x1 H5 i) H
  119.       file->vers=(float)atof(version);+ _) q! s# ]5 D6 L. |
  120.       UpdateList.push_back(file->full);* G7 f4 e' f# V  B/ e: ]2 @$ W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      v: N3 H9 C2 z. Q
  122.     }# }6 e6 P' t& i% H% h
  123.     else
    1 P; Q) m1 x2 f$ v2 o
  124.     {0 L) M  V5 F! s8 _8 x4 i: p, X
  125.       olds=(*p).second;
    7 E' C9 r0 t5 G) \
  126.       if(olds->vers<(float)atof(version))
    : H; J" ]$ D& m  v
  127.       {3 g9 a: y6 {  W0 A+ ^* b3 t0 ]
  128.         olds->vers=(float)atof(version);6 |' q4 o7 F8 B  z; ?3 `% v1 _
  129.       }+ J6 x: E# E8 L1 Y9 C
  130.       free(file);
    " U( f" \; Q# L5 G+ x" B
  131.     }$ w; K- d* g% e& }5 {# k
  132.   }
    7 j$ L1 w* O/ Q" A4 Z
  133.   fclose(fp);
    4 h. t$ v6 b& r+ R. }
  134.   return true;+ S! }9 s2 k0 D. G. I/ O; p8 ?* m
  135. }
    " w9 A9 r: ?2 N; X$ K: C
  136. , j, b/ G$ Y4 p$ g# [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - Q' F. n( r* t( R3 H( O. v6 S! ^
  138. {
    ' x9 Q$ d$ U6 [' r+ M1 m: q
  139.   TCHAR  szFull[MAX_PATH];$ c* n. a! I8 d/ U
  140.   TCHAR *token,*inter;
    5 v, P+ C  `2 A, X8 K2 S3 d
  141.   *szPath=0;% t4 {9 n" B/ Y7 E
  142.   strcpy(szFull,szFullPath);# j9 j$ ?2 l; g+ u" I
  143.   token=strtok(szFull,"\\/");/ q% T# _' l9 L) A& A
  144.   inter=token;" f0 H7 K# k3 z" O( ?
  145.   while(token=strtok(NULL,"\\/"))$ N3 v4 s& J; g- @: k
  146.   {
    ' s3 w( I& Q! Q4 i+ m) |1 _
  147.     strcat(szPath,inter);' P3 \; c# A, y; k
  148.     strcat(szPath,"\");
    , G# O) G) J! a9 ~
  149.     inter=token;9 ~  ]* C' T5 m
  150.   }2 E3 d  g* G; u5 r% F0 }! ^: h
  151.   return strlen(szPath);
    % o3 r5 E# O! G
  152. }" J: R% ]% \7 a( v# C* S- d/ F

  153. / B' N* m3 y) C" m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) k' ?& |. g# N1 v
  155. {7 x: L, g( r2 k
  156.   DWORD attrib=GetFileAttributes(Target);; R' [! j0 f! m" d8 F
  157.   if(attrib!=-1)
    7 _! x; y9 K/ L( E% X" q
  158.   {
    : d! }. q) Q. w$ E, j
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 ]4 V; l( P0 I- Y
  160.     {
    9 j: G$ d9 |) n; D
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);" Y  Q" f, Z( o/ ?6 F4 B2 R
  162.       SetFileAttributes(Target,attrib);
    9 a# J" s9 K, J/ q$ ]: E
  163.     }
    ) f/ e2 x0 V; v; ]7 A3 _
  164.   }
    $ p0 p% U- v" W( l7 G/ I
  165.   CopyFile(Source,Target,Erase);
    5 t. N! v, ^. p8 l' g  n2 j, v
  166. }) D8 {8 a" O7 C3 H
  167. , x, p' X7 c- g) k; {4 ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : t0 G( c) d2 Z$ `- n7 \
  169. {# T( W% B; r- G7 I
  170.      FILE *fp;
    9 `7 L4 [& v& k
  171.      char  szBuffer[8192];# w  x8 {$ R" e7 t
  172.   va_list  argptr;/ t. J/ @- O8 \4 E) P

  173. + D8 ?9 |  y: P( S2 _$ ]: `
  174.         va_start(argptr,message);
    2 e/ @- V( v6 G0 b# {- {
  175.         vsprintf(szBuffer,message,argptr);
    7 L% P7 k/ R$ |
  176.         va_end(argptr);+ \1 _7 _( G$ R& ]7 R
  177.   fp=fopen(FileName,"a");
    / S, j) \2 R6 ?- L1 k( @
  178.   if(fp)
    ; r" a7 v: h' ?
  179.   {. u! ]9 j) J; ?" p
  180.     fprintf(fp,szBuffer);
    ! s: ]5 {. r9 u
  181.     fclose(fp);
    2 }% V' i( T! p$ r
  182.           _flushall();- x+ A( ~+ Y; V0 [; K! X
  183.   }
    $ e8 F+ X3 k! J* h; Z" f, p
  184. }
    ( S) K. t7 e' i5 ~3 H( ]
  185. 7 j" d) b) A! g& v
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % z3 w, V+ L2 u/ u
  187. {" E+ J3 B0 \* y' W1 I2 {/ Q
  188.      FILE *fp;
    ; \' a+ P7 w8 f/ r6 R: d9 ]
  189.     DWORD  attrib;) o( O; S- X6 Y9 D# A' d3 W9 H6 C
  190.   attrib=GetFileAttributes(FileName);( j9 L8 i- o5 n  |2 q/ x0 g2 T
  191.   if(attrib!=-1)' x1 _$ F/ k' e: O* o6 f' {# ]
  192.   {0 ~- ?5 H6 N2 s8 S4 P! s; Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);3 P0 c0 V0 X# U) o. e
  194.     if(!SetFileAttributes(FileName,attrib))! ?0 v/ C% P* m; R; V" B: x
  195.     {' a/ y* M. R9 U# K2 S4 i
  196.       return FALSE;
    3 z  z# F5 q7 w' p! x
  197.     }
    - T; H' L1 S3 B" L, O- u
  198.   }
    - o9 [( _  T& S, n0 Z
  199.   fp=fopen(FileName,"wb");" q# V0 g- P& O. n
  200.   if(fp)" n  S5 ^. Q: v& O
  201.   {- l- \/ W- k. c6 ?
  202.     fclose(fp);
    + B3 y  A6 W5 V, ^0 {, E7 c
  203.   }% ]: @5 `; D5 _, o
  204.   return TRUE;  a6 w) i+ i7 s8 g
  205. }2 j9 \0 q9 A% ^4 x/ Z, ~+ W* }

  206. & G) r; \  I+ D$ R5 g
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    6 i% P- ]7 O+ X$ B0 H
  208. {0 E7 i- B- S& \8 R/ I; y; E6 v, o
  209.   char filename[MAX_PATH];
    6 k1 y, |: Q9 T- K, O
  210.   LPUPDATEFILE file,olds;
    ! S' H4 m. L9 w* ~5 r: w: S/ J
  211.   std::map<int,CString>::iterator i;1 s. Q6 ^# l; S  W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 e' Y3 c3 g. g0 p. q
  213.   std::list<CString>::iterator l;1 A3 B5 |8 i) D  \# Z( V

  214. ! ^+ p& e! E6 n, A. O5 ?, h
  215.   if(bFirstUpdate)) k; l- q# L+ p$ q1 g
  216.   {- g' B- a: c* t) c4 T
  217.     dwCurrFile=0;
    * o, Z! s7 V% Z6 ]4 z
  218.     bFirstUpdate=FALSE;
    ; W* l/ [( W* `; [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # Z% A$ [- O( q1 P) b. X( I
  220.     {; u* h7 V) b, r7 T( v# [( q2 f
  221.       dwTotalFiles=UpdateLocal.size();) ^: T  K( w: H% l" e% Z% _
  222.       dwDownLoaded=0;
    + A1 g7 S5 p: M2 G' K  E
  223.       bSilentStep=FALSE;$ U$ b* Q& z  D. W% \
  224.       bCompressed=TRUE;
    8 r% x/ d, Z: k
  225.       strExtLocal.Empty();
    ! C/ l5 S# p$ W2 L% u- ^
  226.       strFullName=(*i).second;
    : j4 z. q2 m- y/ v
  227.       dwProgramState=AP_CONNECT;
    : k# [& [2 k# X3 O1 ?
  228.       return TRUE;
    % h$ M( n9 ]# Z- N
  229.     }5 S! p/ \( a  Y) t% @' H
  230.   }
    5 w8 G4 H6 f+ o- w$ s
  231.   else if(bRestartUpdater==FALSE)
    % D# e: j1 e" y0 S
  232.   {! E  Q* }# k/ z% W' U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) o; M) l+ n/ p% \& X4 Z) l
  234.     {  `6 l+ A9 K: b
  235.       file=(*p).second;6 G! i+ Q. G4 F% D6 t5 g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " H, F# C9 k' k# |, d+ [
  237.       {9 t: u8 _5 w, i6 q. u$ B
  238.         olds=(*p).second;2 O5 x7 i7 |( U$ U( D5 D8 E5 H
  239.         olds->vers=file->vers;  {* Z. k+ y9 K6 z: [7 \: t
  240.       }# v- e8 ^9 p" @+ V0 K# g
  241.       else
    " N5 j$ O- K3 P
  242.       {
    5 q  o. N, c+ Z9 ]' e$ m9 t* C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ P5 E1 C8 \9 b* Q+ w! z4 i2 e& M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , I& G# ^: r7 R' d# x- x" {
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" f% d0 p. M' Z0 O! ?5 K& `4 M( R
  246.       }
    4 t. I0 ?% S+ m' H0 A9 `0 t+ h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - j2 i. t; o. F* s9 w
  248.       sprintf(filename,"(%s)",file->file);2 E. e$ b4 ]5 s9 F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 }0 C$ ^; F  o) B1 o5 ?& c4 n
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 N6 ], v* ^+ t4 R: D
  251.     }
    ) v6 T" b' X0 ^8 h8 z
  252.     dwCurrFile++;
    . F& @; R1 l8 x% C; c1 C" C8 E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ _0 b+ b7 }7 G" O+ n0 X/ ?7 Y
  254.     {/ V; ^* }" J7 a' e& Y. ?, l" Y, a
  255.       bSilentStep=FALSE;
    4 S& W3 C  G2 u  E
  256.       bCompressed=TRUE;
    ( j0 _3 t# z/ W5 v
  257.       strExtLocal.Empty();
    ( f9 S: @) f5 w& ?- _
  258.       strFullName=(*i).second;
    5 m( N3 O. K! U8 u/ P& r, x
  259.       dwProgramState=AP_CONNECT;# x- u- l! B# o( c
  260.       return TRUE;
    / S) F; D3 s. L7 R8 L6 [
  261.     }, J* }9 k2 @1 T
  262.     if(!bRestartUpdater)' i- O9 i, T9 n5 U/ M% r
  263.     {% o/ t4 L  v+ C- m) x# }# `3 R& v
  264.       int iCurrSize,iFileSize;
    * I' _" w. Y# [' Y
  265.       iCurrSize=0;
    4 A( c6 i5 V7 }9 |( k. X& C( r
  266.       iFileSize=UpdateList2.size();( S' T" g: j- c# j. v3 W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ Q. I0 n* q) o% ?0 ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, S! P2 O! B% \" N' x7 h6 M) \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ {7 B! W$ _  @" o
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# _5 G& F2 |5 L* u# g' o! ~; c# O
  271.       Fclearf(".\\update.dat");# [7 V# h# Q# v4 i: P
  272.       Fprintf(".\\update.dat","Bloodyf\n");' `( S# v9 ]+ }4 R) P, |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # [$ w0 G6 M. r4 ]
  274.       {& u' T0 S3 A* k6 d: A# T0 ~, j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 J* I/ t- D; |
  276.         {+ {  J) t8 n4 P6 I
  277.           file=(*p).second;4 U( w- b4 S5 [8 u4 J7 s
  278.           sprintf(filename,"(%s)",file->file);0 ]4 e. E, \, B- f5 [( }
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , Z4 }2 D0 F4 i1 {) l4 i, z/ T0 R
  280.           iCurrSize++;: H7 v& X  }; G, C* |/ F7 l
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * }) g/ P3 \, y$ d0 _" m
  282.         }6 e- n' y" o- Q) y
  283.       }1 L3 v1 J9 x$ W0 H) m7 K; B
  284.       unlink(".\\update.txt");. X' B0 d3 ]. k& {1 [/ U
  285.       unlink(".\\update.tmp");
    - r- y% L5 c; m. b, V% i; o3 _
  286.       Fclearf(".\\checkversion.dat");
    1 W! s/ t9 }1 n( C# B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ I3 [' |% }7 b& O* i
  288.       if(UpdateLocal.size())
    2 M3 Z3 |% [: M3 `
  289.       {
      O2 O: ]& V2 S3 Y
  290.         UpdateLocal.clear();
    - u: Y" H$ Z" v! ]
  291.       }
    7 B: X# [; a! V/ a5 l, g. E6 ?
  292.       if(UpdateFile3.size())" H- r7 v8 g3 Z9 g' C* }
  293.       {
    9 A/ h2 M1 K; I1 p1 g) O: K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & ]2 @0 Q- o; P1 `/ G  _' M
  295.         {
    ; u' c* I- b- S# X# q
  296.           file=(*p).second;
    3 |. y! K! `: \9 S
  297.           free(file);( p$ W  U4 x+ n6 n
  298.         }
    ) v) p( K# `* I
  299.         UpdateFile3.clear();
    4 D' s% i  J7 a" u8 B
  300.         UpdateList3.clear();. D( P2 c; ?3 {6 \4 t8 E' k& W0 m( e
  301.       }: p' C4 T3 V7 q; J9 y
  302.       if(UpdateFile2.size())
    ( J& o* d$ N6 s0 y7 n7 o$ r9 Y
  303.       {
    ; z0 i  D1 n( W- S2 [. g  A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 w7 H) f  @+ u' e6 y% Y4 J" M
  305.         {
    " B: l# L" Q+ K, U1 ~
  306.           file=(*p).second;
    * I) ^# Q1 b" ]5 C$ a0 Y
  307.           free(file);
    7 s3 N: c9 K0 N- S5 A+ D
  308.         }
    . S+ Q+ Z5 L: m4 B+ b0 T
  309.         UpdateFile2.clear();
    5 |9 m$ E7 l/ E; J
  310.         UpdateList2.clear();
    5 n1 |! [2 h0 W- N. g
  311.       }
    5 h& c' Z' I4 Q: q& e
  312.       if(UpdateFile1.size()): N* C% u& x- G- K
  313.       {
    6 v+ z$ Z  O3 b/ W8 [0 N, N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 W  l: d- ^- B% p
  315.         {( K4 o" Y  s. r( a
  316.           file=(*p).second;
    3 e0 ]& M9 D* z% I+ [0 _
  317.           free(file);$ W" M& ~" E: h7 I8 u" o
  318.         }; v9 Y( w* T7 Q" ~- `- F- c
  319.         UpdateFile1.clear();# V9 G  ^/ Y* w9 T
  320.         UpdateList1.clear();# f/ W& M6 ~% D+ D5 g
  321.       }
    3 F( ?; R+ a: ?% l3 I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ R/ _( j, z8 @" ?
  323.     }
    ( S% }9 f+ p, ?2 a( O  o
  324.   }
    $ x( i2 G" I3 E2 n* ~" C
  325.   return FALSE;- S9 O% h& J' Q0 ?2 x; h
  326. }
    2 J% [, B5 w( ^0 \7 N. X% o

  327. 5 Y/ t7 W; r5 d) v
  328. void CRevAppApp::ClearAll(void)2 l, c. {: _% p- o+ N
  329. {7 p' ^2 k( q* m. D3 l
  330.   LPUPDATEFILE file;& r' m+ H9 m  ~# r2 G3 Z' w' q9 Y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;$ @6 R" u  O8 d7 l/ u

  332. : C- H! o8 d$ u% `( v* D
  333.   if(UpdateLocal.size()), k: u6 c- o1 u8 _1 E- H! I$ J
  334.   {
    . e, l( L) _( d5 M& M$ v
  335.     UpdateLocal.clear();
      H9 s7 \' q, x$ J# t; Q3 R
  336.   }) f% q! E. ?# R
  337.   if(UpdateFile3.size())
    $ X# {# n+ m8 _9 w
  338.   {3 D1 Q; \4 O$ P) S/ S: t/ e3 k3 X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . d4 k* Z$ ], \
  340.     {
    , K( L/ F4 Z& l/ z8 ^' O
  341.       file=(*p).second;( O7 U0 e2 V6 v. s+ d
  342.       free(file);
    + H% [$ I4 q- f  E5 n2 M
  343.     }
    ; G2 G) q) a+ J4 Y2 ~/ I& g, e
  344.     UpdateFile3.clear();1 e% }' z0 e' y* T
  345.     UpdateList3.clear();
    7 K1 w0 L0 d' B( f6 U
  346.   }+ M4 m# m1 v4 l1 e6 ~, b! @
  347.   if(UpdateFile2.size())$ P- }6 f5 v3 d+ _' F7 h4 m0 n: e
  348.   {
    . f$ T: W( W' Y5 @0 J$ P- S0 V+ p1 D
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 v6 i8 S/ ]3 Y6 ~1 S9 q3 o
  350.     {! G% o+ f1 b4 w% Q
  351.       file=(*p).second;
    7 n; {' @0 m3 K  i% I/ u
  352.       free(file);
    0 ]( _3 c% X! S6 c
  353.     }
    * t5 [' ^4 S' b% |6 i* g, {
  354.     UpdateFile2.clear();
    $ _" P1 x3 X& n7 L5 B1 g
  355.     UpdateList2.clear();5 m" T9 Y) j8 [$ H
  356.   }. n" J/ _8 c3 @$ q$ [3 x& a
  357.   if(UpdateFile1.size())
    4 t8 [3 d! T; ~5 N# M
  358.   {
    . p8 {. }+ r0 ]8 V3 y# ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" J9 S( i1 r5 O# G9 g* s5 z4 {
  360.     {
    $ ?1 W; o7 k2 E- L" U7 v7 y6 f
  361.       file=(*p).second;  T5 c3 W- J& {$ Y
  362.       free(file);
    ) H' o( V/ D& m' W
  363.     }
    4 f. ~. l5 k' n" w
  364.     UpdateFile1.clear();/ I0 s, }) |9 E  c" }
  365.     UpdateList1.clear();3 M8 z) G. y3 ^# ?4 Q0 M5 Z' L
  366.   }
    ' N3 b, g5 s5 v6 l
  367. }  
    # H+ r6 L' V2 S7 f* e- z- ?
  368.   0 W  O" q! O+ b4 A0 i3 Z; T/ E
  369. BOOL CRevAppApp::CheckLocalVersion(void)) C1 l8 _0 L" [& I) v+ F. H$ ~
  370. {8 D& M& j* o8 M5 G  |5 V% V# Z; q
  371.   int c;6 F) z8 ^! N9 ~& ^+ b4 f
  372.   LPUPDATEFILE file1,file2;# E* w( I, R# \' C# w8 r% K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : c2 \" u! Z: M
  374.   std::list<CString>::iterator l;$ R4 S: U* W1 S

  375. 6 P; v: M( S1 T& W1 H  x( A  {
  376.   UpdateLocal.clear();( v/ V$ L! ^8 i+ e: r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 u0 g& U/ ?6 y7 w' I6 F; I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % O$ n6 j( }9 V2 ^$ P1 Y* g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);; G2 k" q. z- K* B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    % G6 r& ]9 r- |' R* q# h+ ^
  381.   if(UpdateFile3.size())
    0 P& Q5 h8 d7 m" K2 ]4 T1 q
  382.   {3 x( L# A  z* s$ R- }4 P8 Y9 E' G* Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 H/ {( H& C% m0 G: z0 f% X
  384.     {# d7 X- ^- @3 b" w9 G: y5 Z
  385.       file2=(LPUPDATEFILE)(*i).second;2 w0 }2 ~- g1 [+ i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); d, k+ N9 V4 {4 _' n: D
  387.       {
    * h5 m& J5 H$ z) k* W* o1 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 j1 c7 p4 T1 F6 U, W8 [5 w
  389.         file1->vers=file2->vers;, C8 v- x, e. g6 x& v
  390.       }
    ! `& F3 H% [5 `$ j/ C5 r9 k
  391.       else
    / z& _% H. A0 i. j
  392.       {
    2 M5 T: x& z" D, @  X* g$ g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; o# ?( ~+ F; q) e6 w5 C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " X0 o1 ^* Y' l+ K; S& k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));1 N2 o! Q: v- P( I& F! T0 R
  396.       }
    5 D. X/ Y+ b: `
  397.     }5 j1 l! Y, R7 h8 V5 M
  398.   }" @5 I* S* R% E6 A: ^6 C) Y' d; V0 X8 ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 m& S9 j  B; S6 }- t& b
  400.   {
    8 d, z! g. B% f+ c7 \6 r: ~( m
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 |* i0 t" m% m* T1 n7 F
  402.     {
    3 X+ j' K, K* [" \! W( f9 |
  403.       file2=(LPUPDATEFILE)(*i).second;
    % T& M5 Z1 P4 j# Y+ a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! B% b. d* z" }: N/ K9 |& `, V6 V; g
  405.       {
    $ P# W9 ?) e5 f7 v9 M% a! I
  406.         file1=(LPUPDATEFILE)(*p).second;$ @$ x7 j! `5 f! @7 o6 ~# Z
  407.         if(file1->vers!=file2->vers); A  j8 {$ x5 g( Q1 A- V+ X7 x
  408.         {
    2 ~  G# e; N2 ?! ^) b1 G+ G+ h& W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 M$ B" o2 D# w5 X
  410.           c++;
    / S8 b9 _4 y" g8 e) W, A
  411.         }
    4 s8 e" v+ X. Y& }. I. l
  412.       }( E2 y7 Q( Q$ u" ~1 e
  413.       else2 S: q  G$ l/ @' Q. V+ C
  414.       {  Q0 x8 |& s. v/ i) u0 \9 I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* W$ i0 A7 Z1 b. c
  416.         c++;; U1 A4 Z, O' [: N
  417.       }
    3 U) S2 [; }5 X
  418.     }
    : L: K1 _. F: i% i4 y
  419.   }* V3 }5 |8 h1 [; u7 J* A
  420.   unlink(".\\DownLoad\\update.txt");7 V* c) c8 i, R) X, x& \0 m
  421.   if(UpdateLocal.size()) return TRUE;
    / Z* @+ h- A3 \
  422.   else                   return FALSE;/ Z; Q8 G9 q7 h" J  N
  423. }
    " ~$ h4 a1 d% o: Q/ D4 H
  424. - o) E6 Z$ x, v7 q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& O# L' C7 k6 ?; p( L. b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 i- e2 X( R# H

  427. - _- i5 f$ g8 n4 m8 M8 X' ]* O  K  T

  428. : m  |) K; {7 e. M# N$ C+ t
  429. 2 s) E0 Z% e! y9 ?6 s
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' @9 M9 L, b  i  e
  431. {
    3 z# C- L, {7 R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! g: B1 B' b' C- @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% t, ]# o% }/ E9 I+ F+ O! i
  434.   {# h/ {: C& j& L
  435.     char szLanguage[50];
    / y& F% g8 q+ E+ ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ D* S1 f" k  W. ^" z3 Z# s9 r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 Z( [7 B5 I7 d4 {3 L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 ?8 u% M2 Y! |/ a% \% P
  439.     else                                   m_iLanguage=ENGLISH;& D9 g" }$ ]4 A8 J6 ^8 L2 q
  440.     char szRegister[100];
    : D! l6 w5 C. _. X( D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 j' m. l9 K% P6 F) A$ b
  442.     strRegsName=szRegister;$ X$ T6 K  w4 }6 ]
  443.     char szPatchURL[100];
    0 A; K4 q- Y0 |# |( \2 I. L5 z9 f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' |; E( y, B3 L( `( O' u& i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 K: G- }8 h9 T5 z- Y1 \: Q: ^& V
  446.   }
    0 X, T7 j( N, n) \
  447.   else5 U* u8 P0 }+ ]! f
  448.   {
    0 r9 q7 P0 g* v* q6 P8 f' A1 O  I
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( C* q" z: _. W9 v+ o9 @
  450.     strRegsName=DEFAULT_REG_URL;/ W+ g# b& \! [: W
  451.   }
    3 z7 t; Z8 L5 w
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * @1 I* A8 o, Y2 P, \% ?- ~; S6 B
  453.   {- R- o. [: M/ u" T" `0 m, x
  454.     char szIP[50];# g' _% _9 K- H( G
  455.     char szDIR[300];
    * ?; v$ X5 a3 z1 `) @4 U- U3 _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & b$ g+ A  {+ G! o2 f
  457.     {" r4 k) n" q& r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 W  o% }% U& v+ U! c4 U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: O" {! S3 V2 N0 u" R
  460.       strHostName=szIP;
    ; Y# P+ \+ Q' e( y8 x( O3 t1 s
  461.       strHostPath.Format("/%s",szDIR);
    3 N, |1 ^" I6 Z9 m1 w: K
  462.     }
    3 P% P9 C; x$ l9 O& w2 L/ l
  463.     else4 `! B1 I/ L0 i# ~) r
  464.     {
    8 ?5 @- _6 m  d( K4 k6 v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); q8 \7 D6 i) c  \
  466.       {, t. k0 m9 u0 ]9 @2 Z6 Q
  467.         char szLanguage[50];
    ' c3 I; ?! e' ~, I' K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 X: c% m  |$ }6 m3 i% U5 y0 d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & M9 @. x2 U, d4 }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / x% |. ^: u. }% D9 d
  471.         else                                   m_iLanguage=ENGLISH;0 o% {9 Y3 |1 H( P5 @2 i+ u
  472.         char szRegister[100];7 q. v" r; ~+ z$ u" Q  e& `& H$ C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 P5 E$ t$ o8 g9 f: L5 ~
  474.         strRegsName=szRegister;
    ) y) {; o3 a- U4 B7 P4 C; P
  475.         char szPatchURL[100];  a- N, n6 D* V+ O8 j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # k5 e# T) f  @; m0 x! t/ i4 D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 l1 V' N1 m( l: W) r
  478.       }; A6 H$ a( l- e: C2 R9 F
  479.       else0 ~0 m( o( s$ p  S
  480.       {
    , u" E7 i; Z' ]9 Y* r- N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 u: L3 g' D( r* A) f4 N
  482.         strRegsName=DEFAULT_REG_URL;
    * ^8 X7 i* t1 g$ S0 J
  483.       }* Y9 x; K3 G; G4 S8 F" u" Y! T
  484.     }
      s0 W# ?( K8 Z' d+ T  f
  485.   }
    5 }7 z+ V- f, g4 `6 T
  486.   return true;: y# y; q! y/ U3 Y( w
  487. }( S; [* i% y0 }4 C* ?! G
  488. 8 s+ W. n' X) _2 ?' ^  @
  489. #include ".\ZLib\unzip.h"' s8 ]. m; b  L' u' @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ _) @$ x% U- n' H7 ^( W0 U, [
  491. /////////////////////////////////////////////////////////////////////////////, B6 U6 u  i0 ^
  492. // CRevAppApp initialization* n( f, }) R, P' y" l( l

  493. * Z( A" k+ g/ N$ S* N) j4 ^, J
  494. BOOL CRevAppApp::InitInstance()# Z  ^6 W* a, r, Q
  495. {
    9 v6 [6 ]4 j* o% _, g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % p: Y* l0 K* G: O9 i
  497. % P) S) L0 A$ \" I8 Y; {. R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  J' s  c/ X: x$ z$ A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & e6 A$ O+ e! o* u4 S' C  h
  500.   {
    $ C7 }& S  J# F5 {# h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; b) a  J; E3 Z* J4 A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 ~5 q/ v$ f8 Q0 q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( B/ @1 y' ?2 J/ F+ `" u
  504.     {! i9 a# ~: T2 a! a4 Z
  505.       strcpy(szPath,szPathTarget);2 Z* f7 V3 S% h" ?( }- F
  506.       SetCurrentDirectory(szPath);
    " Y. k8 l3 S5 {
  507.     }
    ) r8 O+ f6 j' N/ i. y; \  }( C
  508.   }
    . p( ?, T* W  ?1 T
  509. #ifdef _DEBUG+ Y1 D3 m6 Q/ Z. b3 b
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& ]$ G) i* S* j# {# v& l
  511. #else& L5 {+ o' ~5 J# _5 C: ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & v1 C$ p. z5 K- X
  513. #endif
    $ i5 w6 {7 t+ b+ t3 Y5 F/ [) z) X
  514.   {
    : N4 d0 k& }7 ], s$ a5 v
  515.     char tempFileName[MAX_PATH];, l2 B" z4 ^3 t- H
  516.     strcpy(tempFileName,szPathSource);5 c* N0 w. _* J
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 L5 P2 b# N, T: D. l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");2 c7 r; }& Y5 W' u+ K  b
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    : @( r2 ?5 c- L5 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! A" t9 W8 j3 L2 d
  521.     return TRUE;) @. }3 N2 R8 }% G$ A
  522.   }
    $ D5 W9 \( g# [/ |5 i0 H
  523.   // Nuke 0118: Delete run.exe, p8 f0 J. a. O( {0 {5 m1 `* ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 Z' ~' B+ n/ d  u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + J8 @9 U" o. R
  526.   if(!ReadCfgFile("Config.ini"))
    & ~/ U4 a5 R1 W# \5 s7 b# Z
  527.   {( x8 N  m9 y" w: u! R8 T
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) t% _% Q& o+ L/ W
  529.     return TRUE;  ~2 B' E* A- R3 h
  530.   }
    ' `' A& B+ G# Z; x8 g- c4 k# Z' d
  531.   HANDLE mutex;5 m1 P( C- b9 B3 b5 ^+ f) j) c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 A+ O; ^3 Z2 D% U+ V
  533.   {1 `2 h" u8 K; ^/ Z) Z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! T; S6 s( C- \' |$ U
  535.     {* W8 C, {; _# S( W
  536.       CloseHandle(mutex);  `2 D' i" O7 M  E" z' b! n4 X
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# l9 [9 R7 Z# P2 e0 e' c+ P
  538.       return TRUE;7 O0 P" ?0 C% f# ^+ ^9 ^9 v
  539.     }
    ! Y+ a0 P* O& S5 ?3 b0 a8 l
  540.   }  ( _/ s, o; e; L; z0 l) v
  541.   CloseHandle(mutex);
    . o! j! g1 E- |
  542. + k  N6 D' R4 U3 k' n. g; p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- ]8 V- q) [0 @: X- D
  544. 8 v9 l: h, f3 i6 C# b, G
  545.         AfxEnableControlContainer();5 f% K6 k% e" i  L6 J( X6 K- S
  546. ! A3 b% ^0 F9 N" v* \, B2 Y' K- x
  547.   bCanUpdate=FALSE;
    5 ~, s) }" B- W5 Q2 `, M
  548.   dwStartUpSteps=1;4 J3 v( X  W. \- ]
  549.   dwProgramState=AP_NOTHING;
    # L' U8 O/ g- ~" Y. Y1 p# A3 i; F

  550. 3 \% v7 j% ]/ h3 c4 R$ t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% K! `% O* M5 m6 G

  552. 4 ^: h$ y" v  W8 S8 w
  553.         // Standard initialization% n# g% a1 W& _- M3 `9 N3 Y4 @
  554.         // If you are not using these features and wish to reduce the size" H4 s+ y3 {3 G# a, f0 T+ o$ Q; w4 ^
  555.         //  of your final executable, you should remove from the following
    ) `- k) |# ^/ }* ?
  556.         //  the specific initialization routines you do not need.& L  f  E! I$ i# j8 L7 |* z* m

  557. 3 G! J3 c- r! v' I6 }
  558. #ifdef _AFXDLL( K# ^: I4 W, G% `. R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 {7 J/ G+ B" J, n
  560. #else
    ( A1 {: R6 i& x% S
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 q& u/ |8 O: j
  562. #endif
    4 a4 D: F5 L/ L) x3 @
  563. 1 e3 A- [8 W+ w. m; W. y% j8 e6 V& u
  564.   dlg=new CRevAppDlg;
    $ h3 Y" d& A, ~8 @: ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 S3 T0 X6 D1 T( |' I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! N, w& Z& ?8 h' W
  567.   m_pMainWnd=dlg;
    2 U( }4 x- K- o: j3 ^
  568. : J" R- n9 }  @& j: {2 p0 _0 V9 ^7 A
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, ]3 y) A& M/ k  R/ X

  570. 5 N: S' i5 p% ]1 F! a9 A' E
  571. //  GdiplusStartupInput gdiplusStartupInput;' q) S( @# @- U  I, M3 {! H9 _* J
  572. //  ULONG_PTR gdiplusToken;
    $ S' J6 S) p; O) s4 K! ^) ~4 B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" f8 j' H" ~& T+ m& E3 @

  574. , |' t) m5 o& g% v' G
  575. //        CRevAppDlg dlg;; z  D4 ]" k  M9 Y6 L/ O
  576. //        int nResponse = dlg.DoModal();
    9 i7 l2 ^) \3 e. L6 D2 f7 x* a
  577. //        if (nResponse == IDOK)9 U, F" {4 ^8 Q; |) P& z
  578. //        {5 d! H9 [0 U) j) F* R: ?/ U
  579. //                // TODO: Place code here to handle when the dialog is
    1 v$ i, c* w3 l9 z5 }9 l' N
  580. //                //  dismissed with OK
    8 N$ Z) f/ a  g5 B% I4 E9 ]' }: H
  581. //        }
    0 N  Y  \1 N' f6 v3 f) F& l
  582. //        else if (nResponse == IDCANCEL)0 h# c. t+ R6 n" }* w) }, f8 a
  583. //        {+ D" ?- k" i5 f3 s- O
  584. //                // TODO: Place code here to handle when the dialog is' }: P1 B  B: R4 ^- ]8 C% Q
  585. //                //  dismissed with Cancel3 X  F  d1 G/ d  b( }, [* [$ W
  586. //        }
    2 |  m1 q) k; q6 C

  587. 4 k' Z2 g8 X) v% E
  588.         // Since the dialog has been closed, return FALSE so that we exit the" D9 b7 F' u5 d) E3 \
  589.         //  application, rather than start the application's message pump.
      M% Q6 w1 n$ e/ i: C/ a
  590.         return TRUE;
    2 F' T( o5 l, r# f1 r: X
  591. }
    1 X' O0 L, y. X# b. n+ `
  592. # t- ]5 a4 Y' e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & |0 R( e" k! L3 `' u) g% Q
  594. {0 c' ?8 P) Q6 X# m8 P+ c
  595.   int i;
    , E8 A, P0 k  }  @+ l
  596.   char *szRet;5 F& r2 R! f  l1 e2 G& e, Q* h# B6 v
  597. 0 [8 r- _9 j. Q$ D5 p, v# E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    / u$ _# D! I, \; ?% R" ~
  599.   if(sztoken)
    ! `9 x, Z: t3 p7 @
  600.   {
    . G: k( T5 ^' m+ c1 M" F
  601.     szRet=&sztoken[itoken];% `3 d4 s( W, i7 ?8 Q! G1 r
  602.     while(sztoken[itoken])
    + [/ N+ @+ \2 _& b
  603.     {
    5 q- e( _2 Y$ l1 m% Y0 x$ j7 V
  604.       for(i=0;i<(int)strlen(token);i++)- _+ x& h) D5 a% x
  605.       {
    ' X! e" i8 e# A( ?$ H- ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 F- S6 T" M9 _
  607.         {2 ~7 K8 G# v+ a2 m
  608.           sztoken[itoken++]=0;+ m- L# e8 X7 ~, o6 w) K
  609.           sztoken[itoken++]=0;2 t" y7 l# z; L7 O1 A& L
  610.           return szRet;. q9 y+ c" P1 O7 R( P% d( n" t
  611.         }
    ' {" a5 ]! \% ^, M( h
  612.       }
    5 K. `/ F( d, ]! W3 v+ W- T
  613.       itoken++;( T0 [5 k# G# ~
  614.     }
    4 q9 U4 z& X( a% J: u/ r7 j
  615.   }
    2 a' s, R  Y  v7 X
  616.   return NULL;- e+ @1 w- ~1 [% Q# B
  617. }( v& c8 b- L+ T
  618. , m; H* j6 y7 g
  619. void ProcessProc(long Total,long Current)
    - }, S; F1 o" ]8 M5 A$ h4 h
  620. {7 F1 ]4 T! w/ ]0 n  g1 u2 E, s
  621.         MSG msg;4 c  D0 S4 W4 e5 ~4 K( C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    5 k/ _! R: J8 g; @# j# j0 r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - S5 o. o; h" R: V/ p( P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " j) z6 O$ J0 \( l, d
  625.         {3 p* f+ Q9 [: k9 c" z0 _' _- [; a+ k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % P+ i- p, L/ Y' N
  627.                 {3 I( e: Q) |: q2 W
  628.                         return;. a7 a  r1 Q4 m1 v
  629.                 }
    0 E5 Z1 h5 i' `3 a" t% R
  630.                 TranslateMessage(&msg);/ S" T: Z9 g1 H
  631.                 DispatchMessage(&msg);
    - Y! z# ]/ Q5 W5 m
  632.         }       
    5 E7 v7 [. _# N3 X
  633. }# \$ ~7 m+ M; M6 ?: I
  634. % X1 V7 m+ F& y
  635. BOOL bFirstChar=TRUE;
    8 H  ^- {2 G5 ^( O" I
  636. 6 Z' R6 P9 Z: h( r  C
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    : _7 y* B% {! N$ N, a3 G$ y
  638. {
    , E6 z2 d) i3 F5 e3 }# I5 ]
  639.         // TODO: Add your specialized code here and/or call the base class7 Q# f* T: G4 S+ w! [: H& Y7 |9 B% [8 ^
  640.   switch(dwProgramState)
    # k: y/ s" M6 d' @
  641.   {
    3 r+ R8 @' b) u& }9 B
  642.   case AP_NOTHING:* @4 l4 F( d5 l
  643.     switch(dwStartUpSteps)  C8 H; |4 E+ f. V) g4 k& H7 }* I( V5 j
  644.     {
    ! \: L. F; M1 @5 y( Y
  645.     case 1:
    + u2 Q* z, B$ q# Q$ I  G8 ?
  646.       {# q7 Q0 a, @% ~# N  F$ n
  647.         int i;" E/ P% w) \4 ~
  648.         CDC *pCDC=dlg->GetDC();" ?- g" ?5 M9 d3 `! \( p' N8 c
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; D# e- o8 ^( C) J1 E5 i( d
  650. //        Graphics graphics(hdcwnd);) z7 y" ?) a5 x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 |4 E7 N5 t; l
  652. //        INT iWidth=bitmap.GetWidth();
    , P  S! F% w0 `) s* u7 D
  653. //        INT iHeight=bitmap.GetHeight();# `( _8 d* t/ y& p& X" v& s
  654. //        Color color,colorTemp;
    ) |# ?0 r  `0 i8 U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 F& I8 U1 P; j
  656. //        {  v, Y" q" S3 y; C: w
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % X, ~+ ~7 L+ n7 p6 R
  658. //          {
    7 U$ K# l+ H8 K3 v1 i5 o
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 u' Q* |) t, c) s
  660. //            colorTemp.SetValue(color.MakeARGB() ^  z4 Y1 ]8 x
  661. //              (BYTE)(255*iColumn/iWidth),6 B$ j+ h% r7 N0 _! {5 ~, N
  662. //              color.GetRed(),1 i0 C# f2 ]5 I3 g1 C
  663. //              color.GetGreen(),8 S, P; T- e! p' F: {
  664. //              color.GetBlue()));) l( [3 Q+ \4 V* K6 k2 o% ^6 v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( y% x7 N9 c( \: Y! z+ _
  666. //          }
    ; Z% `' d) W% u5 Y, v  a6 u+ H
  667. //        }
    ( ]6 S+ W0 R1 w& s- }. ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" q+ X4 |' |7 K/ i- |& a. e3 e
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 ]5 a* v* y# U0 y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 {: Y+ y; f9 U- ?0 a+ y0 \
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 O% z* u9 `% n# `0 B
  672.         for(i=0;i<240;i+=8)  i8 X9 N  N& [. s' G" l
  673.         {! T+ f) S+ I3 q: j4 q9 A9 C7 ^
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 l6 ]: c& R! p2 ~' ]! K' m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 [1 u4 A0 V: q$ X! Y+ H0 v8 Y+ D3 a
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( x+ X; f4 s4 L
  677.           Sleep(33);
    9 _/ X2 f& m- @# t% T
  678.         }" _; c4 g9 k4 h
  679.         Sleep(1000);
    ( f% ?+ H) V8 |9 s
  680.         for(i=240;i>0;i-=8)
    8 S9 ~( c1 F$ z- A) \! r
  681.         {% h  l7 {3 l0 l2 r- k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) w- d( v8 c* A) y6 f0 C
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      j) @0 U% p; t/ O7 G' O& @! K
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ \! ?0 G4 S, A9 I7 x/ b$ W
  685.           Sleep(33);
    . X- e% O3 K& m1 q+ `0 w
  686.         }& I# h, P$ ^& P0 D
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 s! w2 {. T  O" s% {( E
  688.         dlg->ReleaseDC(pCDC);# ^3 z4 A0 B  S0 j
  689.         DeleteDC(hdctar);  O  b$ r- o' U/ @2 o- W
  690.         DeleteDC(hdcsrc);
    3 t) I, |/ w  U0 V, @7 g4 Z3 r
  691.         DeleteDC(hdcorg);, n9 {3 k5 W( B
  692.       }
    - m% d; i$ B+ B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 l3 S1 @6 O9 G2 y6 D, r3 b. M3 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      E9 z1 k' u6 b+ Z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 \! H- h9 B: i$ Q3 @, D9 y7 J5 ^
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( O6 X0 A4 O8 |1 Z+ G* P( R: l# g7 g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: x4 l) F/ m% P2 K
  698.       if(!Dn.Connected())
    ) ^. j* G, n1 E. k& u2 n4 S
  699.       {
    7 P; ?& E0 ~# L
  700.         dwTotalFiles=1;
    # l5 G0 X& J& s4 i: L
  701.         dwDownLoaded=0;
    & G- y! m2 v& Y" U* E; R7 e3 N6 \  H
  702.         bSilentStep=TRUE;
    8 z% |- J# F! |! I4 Q6 W- |/ L
  703.         bCompressed=FALSE;) @+ x6 d% z; u
  704.         strExtLocal.Empty();
    & S  B" |8 j& {) N/ {
  705.         strFullName="readme.txt";
    - t) o  w" x% e- X, i' e2 `' F
  706.         dwProgramState=AP_CONNECT;
    2 o# Y& y; ~( s7 u; q+ G: K
  707.       }5 l) j6 r0 j1 U( T
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 ~. {1 _( T6 v/ |6 K5 L. v
  709.       dwStartUpSteps=2;
    1 B, }! m8 U0 f% Z4 r4 K
  710.       break;% t3 {! n3 B* T8 ]6 n
  711.     case 2:5 ^+ X+ u/ ?& S' z0 z
  712.       {
    8 F  N7 _: y% Q8 o9 T5 ?8 `1 z
  713.         int iEOF;# w* x0 s1 t9 p' f: [  b+ k! D
  714.         FILE *fp;3 r: M- y0 I2 J+ _4 [  ?, I
  715.         char szString[512];
    " U4 I* F" d; l! h' p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 p. y  H: K* \0 o- q
  717.         if(fp), Q: k/ u: I8 B8 @! m7 ~3 N# _
  718.         {  t" ]3 L- X& Z7 c# C
  719.           do& O- z2 g$ j5 L) }! \# P7 G
  720.           {
      {6 V- r5 |% j/ o
  721.             iEOF=fscanf(fp,"%s",szString);
    * b4 ?9 v3 b6 J2 b
  722.             if(strlen(szString))
    # L* Y6 g! [( N; \
  723.             {- t/ k2 K# Z- u8 u2 u+ |2 M. b
  724.               if(bFirstChar)
    , H! O9 w; D9 @3 G: ^5 f- t  R# y0 \
  725.               {
    - @7 k' K+ L8 T" ~+ J
  726.                 bFirstChar=FALSE;5 B( G% w; J9 Z# k
  727.                 bConnectIsBig5=FALSE;
    1 u: m, N+ L1 r% f4 b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - _" R& L5 s* I' @
  729.               }# O+ g- p2 B5 J2 W) o  Q) K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 i: ]( j( R) Y. C% m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 C* A# `3 _$ a. ?7 M) U
  732.               dlg->m_ListText.AddString(szString);: C- L$ R6 B- E' n5 u5 G
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; x  b  b9 W% f: p/ N7 I
  734.               *szString=0;
    % W5 g8 N9 b8 {& r1 F$ w
  735.             }
    . K' j, w0 d- \& E, r) Y$ ?
  736.           } while(iEOF!=EOF);" V4 A0 w6 |# b4 r0 K4 Z
  737.           fclose(fp);5 `$ N! r( B/ x& J7 X
  738.           unlink(".\\DownLoad\\readme.txt");3 Q7 P; @, f' ~- p/ ?0 b7 E
  739.           dwStartUpSteps=3;
    , f6 D4 z- x) f: s* c& X1 E  V9 I
  740.         }
    4 {1 o( M  I( l+ w, s* p
  741.       }6 o2 @& E7 x4 k/ ?8 g$ ?, y6 o
  742.       break;
    $ Z. {. Y  g8 _6 ~
  743.     case 3:1 l6 T) t( v# d( }9 p/ C
  744.       if(!Dn.Connected())1 x9 i+ t, [1 Z3 H" ?5 m; y
  745.       {8 a/ W+ U% |3 P* S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ `' E  j. s- U3 X4 [# J; V( Z& j
  747.         dwTotalFiles=1;
    * K% y) `' Z* W; P
  748.         dwDownLoaded=0;
    - V" w. E7 a& j4 e$ f4 X
  749.         bSilentStep=TRUE;% ], n$ w. `0 a$ k6 ]; g
  750.         bCompressed=FALSE;6 {+ p, J% @) l+ x. x- \5 t8 C
  751.         strExtLocal.Empty();
    4 G% M# q& e; \% g
  752.         strFullName="checkversion.txt";
    " m$ }$ v% A; y, ]
  753.         dwProgramState=AP_CONNECT;% e  E% A6 p/ k" |
  754.       }
    0 p" V2 o1 H) p5 }4 B# P
  755.       dwStartUpSteps=4;6 G" K$ f: m( y( t& D% }. `! l4 O
  756.       break;8 X( K- [0 S4 V+ d
  757.     case 4:
    ; U6 D7 h1 {) |" `+ Q$ S. I
  758.       {1 j( N4 x% c3 {8 v0 t4 C' @0 s
  759.         FILE *fp;
    2 O1 H' H% F) Y1 L* j0 h
  760.         char szString1[128];
    ' T+ O, i! A' j) R8 D7 i! O5 i
  761.         char szString2[128];& A% y: X6 Y: j# a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " k$ u1 c. d3 a. l
  763.         if(fp)4 o# q# b3 [% x, O2 v: h% N
  764.         {! @4 C$ u/ v& x$ q- r: _! r
  765.           fscanf(fp,"%s",szString1);4 D- E* l9 v$ R5 y2 v
  766.           fclose(fp);
    7 A; P! w1 c) v
  767.           fCheckVersion=atof(szString1);
    ! C3 ]/ Z' ]% G4 B5 c0 x2 e' ^
  768.           fp=fopen(".\\checkversion.dat","r");
    5 F# B# b- U  Y2 e. |0 l2 k
  769.           if(fp)1 u  q$ I/ {0 T  }0 c
  770.           {
    ( w" g. O2 x! i' n. x* h
  771.             fscanf(fp,"%s",szString2);
    0 T2 C* [( }! |
  772.             fclose(fp);) \% M& d- @+ M: H% K( Q$ l2 x& J
  773.             if(atof(szString1)!=atof(szString2))
    / f5 |  d# ^5 `% a" Y# ~; Y4 x+ j+ [
  774.             {: l$ z: X* s) e- f4 }! k% Y# b4 N$ M
  775.               if(!Dn.Connected())$ V8 u( K6 k) u4 e+ ]# z% \- |
  776.               {
    ! G8 e2 D8 J7 W  v
  777.                 bFirstUpdate=TRUE;3 w1 J$ L5 _; Q: @. [% P
  778.                 dwTotalFiles=1;
    7 F) l" ~4 h  x2 H/ T9 |1 Z9 h
  779.                 dwDownLoaded=0;4 c: u. ?( I5 ]  O
  780.                 bSilentStep=FALSE;
    . A  `2 P8 q  k1 A: \& g' W$ K
  781.                 bCompressed=TRUE;# Q4 }) a' v6 S" y$ X6 y
  782.                 strExtLocal=".\\DownLoad\";
    $ l# n+ ]' _* f. W4 J  P
  783.                 strFullName="update.txt";
    . F. R9 N+ E$ U9 @" P
  784.                 dwProgramState=AP_CONNECT;
    2 I* s: V/ }7 q  t& u8 d- a. v- D+ b
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- L- R4 s& O% S/ Q9 k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . O3 L" [0 y$ p$ `0 U2 a* P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . l" y; f7 y# C; p% [) I- C

  788. : c4 X/ F2 o& `" A. Y; Z  q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ]5 M7 L7 f" t4 W4 _& e" z
  790.                 unlink(".\\DownLoad\\checkversion.txt");) j, ]: u& p1 U) F: p; p; p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 c5 ^$ i8 k3 C/ r7 K/ t7 J
  792.                 {
    $ l! L: t$ {, Q2 ?
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! y/ l2 v- l" {9 F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, F7 x7 y2 o6 V% v' D# A' r/ H
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 ?  y+ w$ {' B. Q  l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 F& ], A$ w1 ]7 h) a

  797. * j4 l4 f( F& v1 Q1 q! @( t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & t" y" ^) u8 _( M! d; D3 V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # ^0 {# T4 ?8 a# k' [. i
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " \* }. s$ L2 n$ A# J, q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 U; v- l' n% P
  802.                 }% a5 C- b0 u. |) b" {
  803.                 dwStartUpSteps=5;
    ) q, z; q; t9 b# ^2 q9 A8 I
  804.               }2 f7 ?3 o. R: _6 w' l% t
  805.             }
    5 ]& f( L  n2 b; W
  806.             else
    * T  l; f1 \- Y+ `8 h% M2 c
  807.             {) U) `# t  [% g# }. l
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . ~3 e& l9 Y; I' T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 b: x2 n) Q+ d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ Y/ E( u; r7 c+ T+ F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; J4 h6 U4 q+ g8 F% q
  812. 2 s# M9 n# ?3 t% T
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 ^3 F  g# p) [/ K5 [6 }
  814.               dwStartUpSteps=99;- y4 S+ O5 k; `- K
  815.               bFinishUpdated=TRUE;
    1 v" V7 t; v. B  x. A
  816.               bCanUpdate=TRUE;
    ) V! f# T3 b$ H7 t& X  u8 J
  817.             }
    7 g  c6 q7 c7 i" H7 E8 a
  818.           }, z5 i, }5 b  I9 v2 M
  819.           else
    ( r) @9 @5 K* r
  820.           {' N+ B8 c2 a1 A$ h# K7 H
  821.             if(!Dn.Connected())
    2 @4 t! @0 |* O; i! H# c
  822.             {
    3 _7 d# @0 C; R7 Q" s6 E
  823.               bFirstUpdate=TRUE;+ T9 `' T! P8 Z
  824.               dwTotalFiles=1;
    $ r$ s1 q* T, l/ A1 c7 C' b
  825.               dwDownLoaded=0;
    * t7 |! W* d; j0 O( P5 M
  826.               bSilentStep=FALSE;
    + x5 A( L2 d. p  b- R5 h
  827.               bCompressed=TRUE;( b4 H" \5 F: z
  828.               strExtLocal=".\\DownLoad\";
    " L3 x6 k2 h; q: U8 F
  829.               strFullName="update.txt";+ ?% v7 o1 T9 S: w4 h. F" Y
  830.               dwProgramState=AP_CONNECT;8 A3 n. d3 ?9 H. U; P' _8 o3 j
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; ]+ _' j: u# O8 D( g- m/ B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . X- e/ _/ N& W- Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");, Z$ G1 q& ?  x+ V1 X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% w9 l1 {- T& a+ j& L4 r/ t5 w  }
  835.               unlink(".\\DownLoad\\checkversion.txt");' M/ _" K3 n1 r& x, U/ D5 F4 j
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : S/ q% @: I9 X* H
  837.               {
    ( ~, i3 p$ p% Q2 K. u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / H$ _, h: q9 U9 e4 @8 w, R& G; D, ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    . l1 g% V9 V" y8 k; C  N
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");0 h& q" L5 L+ u" N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # f' I" N) T; S9 f/ J
  842.                 . m- z  F+ f9 R/ ?; H( A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 `3 N, U0 j9 K2 _6 O
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* n0 K# D. G5 |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 [; T) f! P9 b" M4 _
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 w. c$ H8 {7 Q2 y7 D2 U
  847.               }! y6 q! ~, K" M0 I6 ^
  848.               dwStartUpSteps=5;
    7 n; t4 B5 z  L' y
  849.             }$ ]3 O& t& L# s6 M
  850.           }8 n  r! R6 ]/ D1 W  x  y6 L
  851.         }
    % @1 q4 a% `1 Z
  852.         else
    * X; F9 O, |# m& |3 k# L0 `8 `
  853.         {! Z$ k1 r! g1 N
  854.           dwStartUpSteps=3;, @: s9 j" m4 h7 v; i; f# u
  855.         }" o  u2 l' g9 e9 k! z5 U
  856.       }" t$ [4 u; \9 D5 o: c+ |$ N/ Z) k
  857.       break;
    ( g* B0 U, i: `
  858.     case 5:
    # U! E! ]7 t! l6 @. n
  859.       {  v+ N8 s: z/ T3 k
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # L6 G' j) @& x
  861.         {5 c, {" x, k9 a7 K; A/ N% o
  862.           int opt_overwrite=1;' n6 a% `( Q) Q+ Z! B* s
  863.           int opt_do_extract_withoutpath=0;, ]5 F6 _$ m4 T/ K/ Q/ g
  864.           unzFile uf=NULL;
    ! x& W$ m" _* j$ Y& C/ g
  865. 6 W+ }& j  x4 z) W) y% f
  866.           uf=unzOpen("Wsa.zip");
    * K# W; }$ Z9 R5 g
  867.           if(uf)
    5 w8 {+ {9 m; ?
  868.           {
    $ v: Z! ?3 d/ S6 a0 s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);3 G8 H" P: H5 @( A) Q3 Z
  870.             unzClose(uf);
    ) F! y) r+ w  R2 `
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 l& p' @- h0 d; j5 T" u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 K* \" k5 _* u5 X) D" j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    4 J7 P- p% `, ~3 T7 n
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ?9 v+ Y% T0 [  o' o8 m& u8 Q
  875.           }
    # ?/ d( _) ~6 W( ?! r; u
  876.           DeleteFile("Wsa.zip" );
    6 I1 O- [8 y7 d8 f- H3 x
  877.         }  z2 ~0 \& E4 v) d. B

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

: b0 \0 _: c5 ]. o6 o% u+ R: v# R

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-2-20 01:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表