CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ U" W6 z9 Q: Z' k  ], z" B
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # s9 C# c' U4 d
  2. //
    & K: b& b% w" }3 r5 o+ F
  3. " G, [% E& M2 v; K
  4. #include "stdafx.h"
    - `. x. w5 L3 i" p/ O% y
  5. ! u: {# o+ i& M. x; Q; O4 y7 O4 x
  6. //#define UNICODE
    1 p, `4 k+ B0 R3 B. O& v4 Z% o1 Q
  7. //#include <gdiplus.h>- v' p" ?. V2 o% U2 L" Z
  8. //using namespace Gdiplus;+ |- U1 e9 v% f& B7 ~
  9. 8 P+ H  w6 m' {' E4 s
  10. #include "RevApp.h"3 B, d* H( x& R  T' r
  11. #include "RevAppDlg.h"
    7 J; V% W7 O0 k$ W

  12.   ]& |( B0 o2 J1 t* F
  13. #pragma warning(disable:4786)8 M( u0 D/ ]( D  |# s/ J
  14. #include <map>, q% |! R6 y8 x2 d+ B; C
  15. #include <list>
    % X. b& w; W" x( N" R
  16. #include <direct.h>. u6 f0 U8 f8 e7 t, s. U

  17. # u; q  W: A8 ?+ g  P
  18. #ifdef _DEBUG
    . y4 D# [+ r( j
  19. #define new DEBUG_NEW
    / N: u" s* ~- K  a
  20. #undef THIS_FILE$ \6 X0 g# Y. b  b5 i0 n
  21. static char THIS_FILE[] = __FILE__;
    + t$ D: `! m3 f
  22. #endif# K, h' x6 H& ^- T; `2 [! [
  23. #include "SkinResDef.h"- W4 e& r/ z1 K: u0 ~& k
  24. #include "ChangeBG.h"
    . @8 j% |. B+ w$ U+ k
  25. #include "AFXINET.H"
    7 b- K, A7 x4 E' H# y% w

  26. * ~9 W' P+ u6 U' ]
  27. #define TRADITIONAL_CHINESE 0
    8 ?1 [6 R* L9 J+ {8 E
  28. #define SIMPLIFY_CHINESE 1
    , j, t$ t# F+ u3 x. \
  29. #define ENGLISH 2
    1 t5 Q2 o: M3 L; H6 p) k- g# K0 H
  30. int m_iLanguage = ENGLISH;$ |: v0 |# p/ _8 {7 H1 E8 j8 b% r
  31. /////////////////////////////////////////////////////////////////////////////
    7 s* \" V1 B' h8 x0 K
  32. // CRevAppApp. N6 g% [6 g7 t( j! d. u

  33. + o# U2 w0 A4 w% S, R) M! m1 D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& p( C% V3 w1 i: I
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 g# V& a3 h; r1 m0 D: @9 M
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * T4 @4 x7 k% Q$ ^3 h0 b
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' N6 p/ H3 n! g( y
  38.         //}}AFX_MSG# z* p4 g- k5 @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); q- J2 ~- z) z2 |+ `. a+ x
  40. END_MESSAGE_MAP()* S' s0 A, X# d$ {3 b: v
  41. - Z/ x+ C+ M( `/ v
  42. /////////////////////////////////////////////////////////////////////////////
    0 ~* Y0 C$ o- w3 R  P
  43. // CRevAppApp construction
    + w* s. y' D# Y
  44. # i9 W  P! a) f  j$ J- `6 q1 k+ o
  45. CRevAppApp::CRevAppApp()0 v5 y7 }3 X5 Y$ o' f' E
  46. {  V. h/ R6 j& _' r. _0 M4 Y
  47.         // TODO: add construction code here,) d0 `9 i! ^" ^! t; \( V0 C) _! R+ f, \
  48.         // Place all significant initialization in InitInstance
      m# x' L9 \* m6 r6 j, a
  49.   bDisplayIsBig5=FALSE;
    & v2 Y6 M4 Y8 {; ?& I  Q* \" p
  50.   bRestartUpdater=FALSE;
    7 i1 W. Z  E# c2 }  u
  51.   bFinishUpdated=FALSE;
    + d; ]7 v& F) H6 h, W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;  C" W$ ^* Y1 F/ p
  53.   InitChangeDataBig52GBKS();+ |: K7 c0 e6 {0 G3 r  e& X5 {
  54.   InitChangeDataGBKS2Big5();7 D1 e* N9 ?8 s* V/ e7 y
  55.         //: @! S/ ^2 f; X; [; x) B3 D
  56.         bClickRunExe = FALSE;+ K4 {6 _/ j$ m2 t5 m
  57.         //
    6 |! h* F8 y; F* p. n  M
  58. }
    : z/ T& p) [- [# s0 ]5 g6 H5 ~+ F
  59. : Y! Q3 {. @" g* p0 y
  60. CRevAppApp::~CRevAppApp()
    & b8 q. Z- P7 l! ?$ b* ~2 {
  61. {
    , x% [% F- G8 i  f4 G3 ^: y
  62.         // TODO: add construction code here,8 T& V: |# a/ U, u* P1 g
  63.         // Place all significant initialization in InitInstance# k, K) B" t4 i7 c' S
  64.   EndChangeData();8 X( s' b3 @& h; C
  65. }$ A/ D) ^; d* w  R' m

  66. ( T2 ^1 i  I3 x, N7 A
  67. /////////////////////////////////////////////////////////////////////////////, I* j/ u" E. X% `* j) `2 n
  68. // The one and only CRevAppApp object
    . O) C8 Q& g' Q- {

  69. ( S$ k9 M# D+ e' }
  70. CRevAppApp theApp;' ^$ B# z$ W3 L1 L& S! b# ~4 I7 C
  71. $ b: `- S3 N8 [3 Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; K0 ~" k- |( v- D% U
  73. {4 R6 O: _8 J4 e* o/ H: {9 t
  74.   int iEOF=0;% `$ b, i+ ]9 q3 }! w
  75.   char szTempName[MAX_PATH];/ b9 k. C: c0 z! d/ W
  76.   *szFileName=0;
    . I7 |& s) L- @6 e4 d2 C( q& e6 w
  77.   iEOF=fscanf(fp,"%s",szTempName);& b# Y5 @# }% J5 j9 V1 M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')) b2 _3 c! Z. l
  79.   {
    ) ?/ W5 Y- e7 ^/ X! K; J
  80.     strcpy(szFileName,&szTempName[1]);
    ( G: j( P% |7 j% `5 I9 m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 ?4 v3 ?. c- w: [
  82.     {
    7 k# \- \8 l$ e! H( a
  83.       iEOF=fscanf(fp,"%s",szTempName);. S' H3 _2 O# V' z8 s( d. N4 ^# |, F
  84.       strcat(szFileName," ");
    6 y/ [$ N1 i, a4 X% K' i6 j
  85.       strcat(szFileName,szTempName);
    . R" i& N& l% |5 N' D( W% r
  86.     }6 r  c5 c/ g3 Z- |" o; g2 B
  87.     if(strlen(szFileName)>=1), V5 z0 _7 Q% L
  88.     {9 L( P# _# \( q- I( F, z& H/ c; j& _
  89.       szFileName[strlen(szFileName)-1]=0;- i* G) K! p7 @. D
  90.     }
      o) W! b5 K, N0 ^
  91.   }# ?& }1 \5 d, r7 \: R8 m, e
  92.   return szFileName;7 n6 d* g$ a  K* a" N
  93. }
    # A* m, |3 T( o5 K, T

  94. 1 i6 K$ x* r7 R% [+ d) h! t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ( E7 s/ X9 B: i
  96. {
    ; }. F! v; H: q7 c
  97.   FILE *fp;4 X7 F2 A  o, \5 u5 @
  98.   char *key=NULL;
    & @6 ?/ x6 l: g
  99.   char version[MAX_PATH];
    : d! W0 ~- @) D
  100.   LPUPDATEFILE file,olds;' J$ F: Z8 F& r9 Z0 i( a8 {3 C* M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 T* l3 ]6 `9 E# G9 ~

  102. 6 D. M0 @% k/ p% u6 j
  103.   UpdateList.clear();6 K7 z. J; t( b: B
  104.   UpdateFile.clear();% g: m+ u$ K0 K$ y9 P1 P
  105.   if(GetFileAttributes(filename)==-1) return false;3 I& @2 f' ~- I- i/ y4 H; o6 Y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; Y/ l) }- F( @' y6 \
  107.   fscanf(fp,"%s",version);, A1 f5 |" K' a" D% I$ h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 p6 N7 p" ]4 k  L, w2 T
  109.   while(fscanf(fp,"%s",version)!=EOF)# K: x& W. o1 u4 l
  110.   {- O& O; |+ M( \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 h9 Z9 F& g* ?
  112.     fscanf(fp,"%s",file->path);9 r/ ^  ]$ j8 q" B+ B2 D, v
  113.     ReadFileNames(fp,file->file);
    ) n2 x( J- s3 T
  114.     strcpy(file->full,".");+ n( U! ?2 Y1 z! E7 G: r/ b* j1 n
  115.     strcat(file->full,file->path);
    + v! G6 ^1 g) j
  116.     strcat(file->full,file->file);2 v, x% r4 L) [$ w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ C: x% _- n0 G" F% h# m
  118.     {
    3 y9 r5 F6 |( L6 ~1 N
  119.       file->vers=(float)atof(version);$ E/ z3 b4 u+ @! C7 ~
  120.       UpdateList.push_back(file->full);5 ~' G# N- d- Y. |
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));0 E- g8 W, R) W1 J
  122.     }
    & O5 ^$ @: H+ j  E( l# l
  123.     else
    # w2 a. A- a& f. |% ?
  124.     {
    6 C$ D  |9 q' S5 _
  125.       olds=(*p).second;
    * V% k: K1 [; }, w# g
  126.       if(olds->vers<(float)atof(version))
    ' u  _. B0 m5 N( Q4 Z7 m, |
  127.       {
    ) C2 B$ O7 u8 ?: w7 V/ Z
  128.         olds->vers=(float)atof(version);
    5 p- }, p8 T2 n. [/ s
  129.       }
    % U, s7 v) X5 {3 O! K( ~
  130.       free(file);: j; D8 ?8 ~( d6 z- E
  131.     }
    - W/ \" l! _$ C  c8 N9 p
  132.   }9 d% M. S9 e% d1 I; X
  133.   fclose(fp);# _# g' E3 S% r
  134.   return true;
    6 M1 ~: V- [+ N' z- c
  135. }
    5 R, e4 E5 ~0 y, e9 c$ b
  136. 6 W: t' O! \0 h4 J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 s7 I+ x( l; m1 [) S/ U3 H7 U
  138. {
    , k: [" ~, {7 c' q/ H$ a5 K
  139.   TCHAR  szFull[MAX_PATH];7 o' a( H/ q$ e6 F2 t, ^
  140.   TCHAR *token,*inter;* h, h& ]( |- J) a8 z% j' V( L& T7 U6 E
  141.   *szPath=0;
    : _  K6 R' i8 r2 o
  142.   strcpy(szFull,szFullPath);  z# n3 n- W6 c1 f0 p
  143.   token=strtok(szFull,"\\/");
    . K% b& ?, B) A) O; k
  144.   inter=token;& M+ z; F; p* y( w
  145.   while(token=strtok(NULL,"\\/"))5 {- S3 t* i# D& a1 H5 y
  146.   {, v, s1 u" C! L. R$ F8 G$ @& K* z
  147.     strcat(szPath,inter);
    . }6 T/ J8 `, i/ ]
  148.     strcat(szPath,"\");% X8 Y5 e+ @% e
  149.     inter=token;. D7 E  Q1 J$ o/ |$ G; k4 }
  150.   }
    ) E3 B; c3 y. C/ B1 c1 a
  151.   return strlen(szPath);* P! g& A6 c. D! _8 j
  152. }" W  j* @! ?. q  `3 ]
  153. / O* ~. C9 s$ ?8 v* Q1 V" U
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      L- c4 {. V% j8 Z
  155. {
    ' n8 C1 O1 Y* D' v. p+ B
  156.   DWORD attrib=GetFileAttributes(Target);
    2 J5 x5 Q% }+ t- K/ u) v
  157.   if(attrib!=-1)) H. F3 X! M" R. f1 ]- |- \! P
  158.   {5 i& t0 B8 q6 Z1 h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# A" \1 T8 G* g
  160.     {7 n3 s% P3 i$ V" k- x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& s0 c9 P9 O7 J+ ?3 e
  162.       SetFileAttributes(Target,attrib);" r; ?5 A* S3 {- ?7 ^" [
  163.     }
    2 Q* Z7 W/ |/ Y' o
  164.   }
    ; h  R# Y  l; Q/ W7 j& }3 W0 Q
  165.   CopyFile(Source,Target,Erase);
    $ {; D) O# T2 O' [& }& ~
  166. }1 z" g( e$ R- P. }6 M* r3 j

  167. $ I$ F. ]/ l' e4 m5 W$ w; ~  T
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 d& S+ a/ y# y* {2 H. y
  169. {! B- K6 C- w6 H
  170.      FILE *fp;; g6 t7 D6 `: U- D
  171.      char  szBuffer[8192];
    " X( |1 j; s5 U; M, K
  172.   va_list  argptr;+ J; N0 H) Z6 f* X

  173. 1 w4 Q; @) p0 P" C4 U
  174.         va_start(argptr,message);7 v9 E# g: D/ o5 Y) C9 Z
  175.         vsprintf(szBuffer,message,argptr);
    " V! X( C, C; Z- V/ l
  176.         va_end(argptr);3 s1 ]- N; r8 v9 G  z" |
  177.   fp=fopen(FileName,"a");" y9 h0 o8 ?. Y1 w
  178.   if(fp)
    ! C: c! J+ f2 c# q7 l
  179.   {
    0 H, F0 \5 s+ e) h, ~
  180.     fprintf(fp,szBuffer);
    ) f* f" \- {! N: Q. W7 g
  181.     fclose(fp);
      L* o7 u8 N, _* @8 A
  182.           _flushall();5 Z7 g9 {8 Q5 c) F% [+ [- D. {0 M
  183.   }& X8 t! E8 u  {1 h
  184. }
    . n% ^# q3 |; g
  185. 8 y9 W3 }: {: I
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 y8 N" d! i% H1 w2 B% R7 Y
  187. {1 N4 U$ N" {2 q8 z1 y
  188.      FILE *fp;
    # Q+ I! I+ ?- c0 F+ ^7 b
  189.     DWORD  attrib;  c  [7 i* M; T. K: S8 q
  190.   attrib=GetFileAttributes(FileName);
      a0 x  u! V7 I* w
  191.   if(attrib!=-1)
    % _* Z( O) v4 T% q" B# X5 ^$ {
  192.   {4 W. }% e! p+ J, s5 @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ r: F  k( U- P- T' P! N
  194.     if(!SetFileAttributes(FileName,attrib))
    , k" Z* I1 @  R% R9 E4 O) y2 ]
  195.     {" [, D& e$ B7 _, q! d  ^
  196.       return FALSE;
    % Y( s) P  u+ q3 t, }
  197.     }4 u' ^# l) t' g! @7 s; n0 D. F
  198.   }/ B. O9 k$ m* L5 C, ?& C
  199.   fp=fopen(FileName,"wb");" V$ T; H% [! c+ i. A0 r8 D
  200.   if(fp)2 u' q7 |  e" `: p
  201.   {
    9 G1 `; p. @7 z  [; \0 {
  202.     fclose(fp);# h+ s1 B. J0 c
  203.   }/ ^- {# I& M! y# u7 y
  204.   return TRUE;: T& w& \, f4 H) @: h. M1 m
  205. }
    4 @& {! ~& b+ G9 K% ~: a% C, N% M
  206. 3 k2 x8 |" s* d+ w8 V# \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * Y: T- ~' K' o1 S' a" e' q& R
  208. {
    " O& t4 C( ]# i, S
  209.   char filename[MAX_PATH];( ]. H% L. p- |9 U8 J% B2 z+ W5 s
  210.   LPUPDATEFILE file,olds;
    9 M; K' u; ~1 A. O- j' N
  211.   std::map<int,CString>::iterator i;
    , }) k) w2 o& s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; j3 G) a; b0 K. A/ R- B
  213.   std::list<CString>::iterator l;9 O  T/ F' B; E% Y+ ~+ Y
  214. 7 v' q' a9 E; n- R& p/ ]0 U# L
  215.   if(bFirstUpdate)
    " E5 b# w7 F  [9 S* h8 ~9 d- [
  216.   {
    1 A0 X" G0 d3 H1 j
  217.     dwCurrFile=0;4 _5 ^, g2 `0 b- s9 k" [
  218.     bFirstUpdate=FALSE;1 z2 P  H! _6 b9 j
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 q* H6 L3 ^$ u5 b: M7 z! P
  220.     {5 M& Y* I4 j3 v
  221.       dwTotalFiles=UpdateLocal.size();
    8 r$ G4 x. R+ ~. N5 Y( L
  222.       dwDownLoaded=0;
    3 x1 B  ?2 C4 I* U
  223.       bSilentStep=FALSE;
    3 V- e/ r  i' ^' l# ?
  224.       bCompressed=TRUE;
    2 |, I2 a# ~7 n" `
  225.       strExtLocal.Empty();% m' n" I' Z" _( q
  226.       strFullName=(*i).second;
    : ?/ R4 G( l: u( Q/ B$ G" [
  227.       dwProgramState=AP_CONNECT;& M6 J8 K, d6 l+ j$ [
  228.       return TRUE;7 t7 E9 `' G; G3 N9 K. Q. Z/ w
  229.     }
    % w* u! f9 o$ E) n+ m' x6 E
  230.   }
      X7 k3 g6 R; U: K8 k# ^7 ]/ p5 [4 ]
  231.   else if(bRestartUpdater==FALSE)& |8 {6 ~7 r  m; }1 h
  232.   {7 c$ F9 i* Y( `3 u3 S8 @# b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    9 c& L3 ?+ k! a4 d  c1 F* d
  234.     {! ^  R/ ?, F* z  t. e6 y
  235.       file=(*p).second;. E% u2 P2 C: H1 H( ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# }; i- W- Q, X
  237.       {  S# X' Z0 k; L% C* A# w
  238.         olds=(*p).second;
    9 ?' u$ F0 }' W3 U) \8 R
  239.         olds->vers=file->vers;0 X. E0 R  h# U2 p: i5 _  w
  240.       }; g. E9 v+ q* {3 G) c1 S9 }
  241.       else
    % ^6 J% d: P" h9 k
  242.       {
    7 v5 S9 i! X# N* x  f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. F# v2 Q1 h9 U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 p6 q$ J6 S7 _( ]
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " i( Z5 E* J; r* e2 k' |
  246.       }
    ' g  x' @  ], V
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ l5 _( s, }6 o7 M
  248.       sprintf(filename,"(%s)",file->file);
      |7 [% \+ {! k* m0 Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' t- y' R+ H& B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) B8 ~. ^% F# @. A* N( a
  251.     }: h/ I  a* b9 u$ F) G1 Q* W4 ^
  252.     dwCurrFile++;
    . Y! H. v6 }' }- [
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). Y/ d2 e; k5 W; s1 \% F
  254.     {* {6 t5 Q' e, @8 Z7 _
  255.       bSilentStep=FALSE;: Y0 J$ h& b( i$ T
  256.       bCompressed=TRUE;8 y6 {8 j. H+ n. X
  257.       strExtLocal.Empty();1 E7 D, E7 z, A& h
  258.       strFullName=(*i).second;
    9 ?0 h! n& J& ]- ]: Y2 {1 u8 _
  259.       dwProgramState=AP_CONNECT;
    1 Y+ @1 {- c& b" E! @6 t
  260.       return TRUE;
    ! B8 h  n1 I9 R# ?
  261.     }
    6 h: F) `- X9 B  j
  262.     if(!bRestartUpdater)5 {/ G# ~3 G; a9 q5 w# C% m
  263.     {
    , W0 M5 \- x2 {, [1 Y- w
  264.       int iCurrSize,iFileSize;- ]# o. v1 @0 w# `! }- ]
  265.       iCurrSize=0;
    % [1 l. n6 i7 o2 N  ]
  266.       iFileSize=UpdateList2.size();6 o  W. v1 t+ D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( k  A# a" B  l/ h" V' Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 W: f5 R# J1 g# k
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - g% `' I. E. p" n+ b/ S7 A9 I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& |0 O# K/ u6 v' D( ~
  271.       Fclearf(".\\update.dat");
    7 f* d) m! ]0 {8 i# ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 I. H' h% q) y8 E1 `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 C: M/ ~! ]- u6 Q* P1 t. V4 u
  274.       {
    5 B9 `# c6 C% r% L" \* G7 p2 t0 ~4 b
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! A: G: a6 j: \1 g" [2 L  i
  276.         {' c" b  ?) x- \
  277.           file=(*p).second;
      i! D! Y' i1 k0 C1 x2 J" a
  278.           sprintf(filename,"(%s)",file->file);# U3 q; k/ \8 n' P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; f) `$ Q7 x' \! i# M  K1 @6 t& I
  280.           iCurrSize++;( V0 a4 d6 }6 A* O1 _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ }8 A6 a' Q! g, F
  282.         }2 _: N) [* _9 A$ k& K; D" A
  283.       }, H  j1 z$ D+ J; g" |
  284.       unlink(".\\update.txt");
    , ~$ j, x( k8 x' A
  285.       unlink(".\\update.tmp");
    , {! W' o, d4 X- y3 ^+ P- x
  286.       Fclearf(".\\checkversion.dat");# a" j: z2 m; Q! Y' K5 c: b- b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 [5 X, t! ]# D  u3 s6 K6 G8 v* ?
  288.       if(UpdateLocal.size())9 P+ C7 l9 t. h6 b: l% b; b- V
  289.       {( W( h: _$ M9 K2 ~
  290.         UpdateLocal.clear();
    9 x3 A- {. z  A' L2 x; ^
  291.       }
    # W8 V$ [. D! n1 y' Q0 u* W
  292.       if(UpdateFile3.size())
    1 P; b) ?) \* [# j& R
  293.       {' @5 ~# Q9 L( x) J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- ~3 i* ^2 P$ W; Z3 y
  295.         {+ V; H, {# ?! P  i3 u! m; l
  296.           file=(*p).second;9 [0 X6 d5 \# {: q+ l7 D
  297.           free(file);
    8 p& v% h, B" {" \1 Y+ k
  298.         }
    7 V5 Y! `+ ]4 O/ G8 O% ~/ }4 I0 b
  299.         UpdateFile3.clear();
    5 K( `! A) o0 y) O3 T8 `: o4 O
  300.         UpdateList3.clear();. ^0 J9 N# o& d* n' O
  301.       }
    ! ~/ E5 P$ \- \8 u) E- l* T3 w
  302.       if(UpdateFile2.size())9 |9 a& y, @. x' H4 G
  303.       {0 Y7 Q7 ^4 ^1 v. [6 W, I$ j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& R( v! J2 H1 ~# p  V
  305.         {
    6 \9 H0 Y, g1 o4 ^- J) p7 @
  306.           file=(*p).second;
    + ^- ]3 j+ T/ t9 Z( [1 O
  307.           free(file);( b! T! A. M% n. @& v, K. Q
  308.         }* T& c. p- a6 ^3 T
  309.         UpdateFile2.clear();
    ' ]- c0 q% i+ y" x
  310.         UpdateList2.clear();
    6 C  c# G2 j0 n5 q
  311.       }
    ) i. \: b" ?8 f* ~6 D$ O
  312.       if(UpdateFile1.size())9 M* b6 _2 D, o9 M
  313.       {2 G+ c; B4 n2 m
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      e) ~, h7 s( t9 ^1 u
  315.         {# F9 A4 H9 f& v( y- ?0 \
  316.           file=(*p).second;1 h/ a7 y% Y4 n/ R+ E/ p) l
  317.           free(file);7 S% p) C; p5 x/ \8 p0 Q  Q
  318.         }/ S% L% x2 B; l' Y- d0 E) _+ e! D
  319.         UpdateFile1.clear();
    . _: Q* [5 L* J% \6 p
  320.         UpdateList1.clear();0 h- I# K8 s( T. P8 N
  321.       }# ^/ [, t) n! {2 t$ _1 t/ c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 j1 S$ T; j2 [: J8 c
  323.     }
    : z. Y, p  k1 Y. Z
  324.   }" l* K$ A* T/ F4 _
  325.   return FALSE;5 |& [  G9 F& p
  326. }
    0 Q& [8 H& D3 ]: ~
  327. . X) j" G' d( D7 {2 ^* ~
  328. void CRevAppApp::ClearAll(void)
    ! F# o5 [. a. c; \0 o) e2 t- C
  329. {
    0 v% {# U4 D( Y4 g, _( h2 v
  330.   LPUPDATEFILE file;
    4 b2 Z/ |2 ?' q+ m& G1 j2 A4 }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! U, }( g- J( a. D

  332. ; O( y) _$ r8 |
  333.   if(UpdateLocal.size())
    # u) a5 |' k6 ^7 R9 j7 S
  334.   {) i$ A% N! G7 ~: B
  335.     UpdateLocal.clear();/ d4 B) x) A4 R( E
  336.   }- M+ I! r" x. b" h
  337.   if(UpdateFile3.size())* h4 W; J/ Q, q; y* T6 s/ |
  338.   {4 a  e) ~* {5 `7 j7 ^7 ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( z6 e# C) C$ g, U
  340.     {
    * M+ q! |% N; G$ ^! k" I  r
  341.       file=(*p).second;
    2 u& Z$ Q$ V5 u3 x- c% C
  342.       free(file);
    0 A6 O" f1 v9 Q8 \$ Q
  343.     }
    $ T9 U( @) d' _) ?8 T
  344.     UpdateFile3.clear();8 e" A# q  G9 x. I  W
  345.     UpdateList3.clear();5 b. d6 L" h" {/ s9 H
  346.   }! w2 I' v; _3 Y% b
  347.   if(UpdateFile2.size())
    " l# U2 d5 b& }- j0 u; V( e2 [9 b( R
  348.   {
    5 i8 A1 u9 X9 ?
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); U, v% u$ I: |- u3 Q4 E% Q
  350.     {
    * r) t# Z& Y1 Q; t& y
  351.       file=(*p).second;3 `1 @7 c* l. b" n' Z% N$ Q
  352.       free(file);
    1 t; M" V, E  |" E& O
  353.     }
    . W" L: O* X5 ?. k: m* M. f& L: w  D
  354.     UpdateFile2.clear();
    1 s- W" U- A  |! A7 \. L* F* A
  355.     UpdateList2.clear();
    " x0 i, W8 g) u
  356.   }# ]8 w% _6 `2 b: m
  357.   if(UpdateFile1.size())# ^2 Q8 r6 E9 i: f  A' h( |
  358.   {' ?3 T4 z4 R$ M! Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - I( l. g, R0 m% y) e& f2 W; K0 o  A4 v
  360.     {
    1 b  f, D" [8 }% d9 J- A
  361.       file=(*p).second;5 O: e5 k( }  k* X) ]
  362.       free(file);
    5 Y0 N9 A5 @0 m$ B5 u
  363.     }
    ) v- D$ @. H  z8 C0 q
  364.     UpdateFile1.clear();. N" Z  o6 a* G; J3 |
  365.     UpdateList1.clear();3 |/ D6 X! U) p4 P. L! D
  366.   }$ V! u% H4 o1 U( b
  367. }  ) Q) V# I- t% B- x; b1 f
  368.     u# [! X7 v5 A, x  }( C" D! E
  369. BOOL CRevAppApp::CheckLocalVersion(void)# p" L* B8 K- k
  370. {* V& O! s: h# T6 p. p
  371.   int c;; j( |; E* H0 R$ z/ `
  372.   LPUPDATEFILE file1,file2;0 Z5 B' z- D; U4 ?; `+ I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; F  v: H3 q+ k7 Z% M7 L4 d
  374.   std::list<CString>::iterator l;
    - u# ]. g6 h3 n" t1 N  W( u
  375.   S! g, O* ~) g
  376.   UpdateLocal.clear();5 c& h4 x7 l* ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( i1 T, [; S) `8 a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & A6 o8 b1 ^% J4 ^- H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* O1 i% q8 j1 h0 V0 R
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * I* Y+ I/ ~- P0 l
  381.   if(UpdateFile3.size())$ [! E# `. Z+ t3 |5 D1 R
  382.   {: I, `! J! u2 B, B/ W  k3 B" A  |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . k3 v/ z5 L; l& V/ O  N' W& a/ Y
  384.     {
    $ g% O* M, n) Y8 d8 C
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! w& a, G/ l0 Z! G: d: ~6 c
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 ^5 z9 h3 d3 O2 X
  387.       {3 t5 V) p0 s; d4 F# O
  388.         file1=(LPUPDATEFILE)(*p).second;
    : l6 g! l8 d/ _5 h9 C- n
  389.         file1->vers=file2->vers;; m5 l4 v( q8 e* \
  390.       }, ]+ i4 \, a3 L# }1 ?1 I
  391.       else) s/ `% M4 o1 L
  392.       {+ Z% Q/ P; H6 {$ {5 l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * s) L& Q0 r! P4 d! d9 |9 s
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 `! y  s1 A" y% N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; J( V2 U$ s. O4 j% F* {6 B
  396.       }
    $ K2 s+ K9 W8 E6 _
  397.     }+ q: K0 K1 c; e# t% _
  398.   }
    . D( }6 [; F' R7 J* k
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 J  Z' R2 Z9 j4 }5 D% ~
  400.   {
    # e; n0 @) ]+ t$ h* @0 V0 s3 `1 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())" T( e. J6 w, N& K& ?
  402.     {
    6 Q3 u4 U# k! C0 l
  403.       file2=(LPUPDATEFILE)(*i).second;! H" p( ~2 u; `) C6 x8 y' w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% Y& Y3 y. h5 }0 f
  405.       {5 y$ u1 ^) O, k8 R0 g* f3 Y+ h$ X/ B
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ u8 e' H7 g" C$ |4 @) d: x! D
  407.         if(file1->vers!=file2->vers)
    $ s% u- j0 ~% R
  408.         {8 F8 j5 c# D$ |- `% B( B7 g+ A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ E7 i9 \. ]1 B
  410.           c++;1 V! g. d2 E, u) A5 _* l
  411.         }; T$ }( J# l' D5 `$ `" Y0 n) b
  412.       }2 }7 \; R4 J0 ^& G6 \/ ]$ T
  413.       else1 R  ^" U! q  Y8 f
  414.       {. d9 Y7 J7 I- v7 W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* H( ^8 k$ F# G4 x
  416.         c++;
    " e, H: j* A# P1 I6 ?
  417.       }
    1 q% M0 P) K9 b7 n8 J" ?$ ?( @& v
  418.     }
    7 r. [: }) n6 o, q" b6 ]" ?
  419.   }
    1 d, v# C- S5 e3 v
  420.   unlink(".\\DownLoad\\update.txt");9 r$ ^0 T( G7 q* [. e
  421.   if(UpdateLocal.size()) return TRUE;* [7 V" Q3 Z* X5 n2 |
  422.   else                   return FALSE;+ y2 K- q& Z9 m7 N% s/ ]
  423. }" A, B) g. l$ i, U" e1 J# g2 a
  424. ; Y, G) [( Y8 K' z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 }0 R, d, C( S; E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( T4 k8 G; s+ J
  427. % O: A, e2 A- a; x# {2 X3 E2 I
  428. ' D! r& Y  r/ [* B" q

  429. 6 G/ Z6 D! J/ i$ X
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). q6 ]  h+ v7 r" s1 C( o' N0 r. |
  431. {
    % U+ ~+ Y" l9 o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    " k, v. o7 v/ ^* ^* d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 o. N' K; I( N  x) J
  434.   {  ]% f/ z4 o1 m0 g" B& r
  435.     char szLanguage[50];8 p" U$ C2 a# M3 S. ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + c: d3 i" }; M% R( ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 |5 ^, a% l9 S
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      [$ L5 T* \: I  l( s
  439.     else                                   m_iLanguage=ENGLISH;
    0 R, V8 [0 }, C, |$ ~4 |
  440.     char szRegister[100];
    , s/ @% R& X' e' L( Y1 w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 t: i; M( `/ h' C1 k' r9 s
  442.     strRegsName=szRegister;
    - E+ a; ~+ Q' {+ {
  443.     char szPatchURL[100];
    ' J1 T# u' ?8 t* f" t+ Q/ p' G
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 G; P3 @; B6 x5 e+ c2 J) ^  s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) ]( Y9 b. O# m4 W: @- L% L1 _
  446.   }
      x+ @9 ?% M3 v( w
  447.   else
    ) Y5 t( x2 s( _3 Q  Z, {* R
  448.   {
    , \9 }- J, f4 H: Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 J$ T/ w# I& D9 R$ a
  450.     strRegsName=DEFAULT_REG_URL;) `7 I7 F5 |; Z3 \
  451.   }
    " h: z7 ^( W- L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . _0 ^! K1 `1 o2 y
  453.   {, N5 R2 X% U, W8 |/ j& x; I' l. n+ R
  454.     char szIP[50];0 g) j& _5 ]* j9 p* Q
  455.     char szDIR[300];( M6 t- ]8 `3 t* [0 w8 S) Z# i) K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ [/ l2 l2 \6 L0 b' x  V0 t/ Y
  457.     {; }2 ^) i* C7 q6 ?- T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# f! W# ]# ?# X  p% H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 M5 \2 Y. c& u8 C! d0 M
  460.       strHostName=szIP;
    ( l2 U1 @3 [% x' A
  461.       strHostPath.Format("/%s",szDIR);% {# h$ W1 R' A7 P" H2 U
  462.     }3 T9 o2 A! Z5 }- X! T
  463.     else
    7 [3 Y+ o" O: G, l
  464.     {3 v: U  _  D; ~; s/ }' ^4 a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 k0 t7 I6 r) T& t! l: H8 k/ `
  466.       {
    9 p0 `% l' Y  _* c
  467.         char szLanguage[50];' `% ?  g8 ?1 o6 I( g* Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! s. M* d- M+ D4 ]( E+ S* C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ G: T, b- C  V5 ]( |1 U0 \
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( R8 z7 N/ K3 D! g+ b
  471.         else                                   m_iLanguage=ENGLISH;" L' N5 E" H" H; l- x" T
  472.         char szRegister[100];
    * ^9 X( i1 l4 X& ^4 z4 Z4 L, y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: |: M0 S7 D4 e; M3 K0 Z+ C
  474.         strRegsName=szRegister;
    . X! Q0 v3 E/ j6 f% W9 n% c/ F
  475.         char szPatchURL[100];
    # Y# g6 l1 G: m, s
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 E5 _# b7 v* D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ Y5 f( O0 G4 b. ^& Q! s
  478.       }5 e* K3 L% W$ W) O3 P' k+ e
  479.       else. G& y. [1 J% z: k
  480.       {
    2 s, O: u" {: c& q; F3 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 X/ x! Z6 X9 F; c  \
  482.         strRegsName=DEFAULT_REG_URL;+ A. ~0 Y% |: }) B0 h/ I" N
  483.       }# a* K0 Q. E9 O+ J  O: b
  484.     }
    2 L- \( j$ W( ?* c; Q$ k
  485.   }6 K0 K* M( `# Q, P
  486.   return true;
    7 T8 @- k/ _9 j& q
  487. }0 {, P& A$ V4 W1 z9 r# ?( G' Y
  488. % N( _" |3 @: i# h; ~
  489. #include ".\ZLib\unzip.h": J) K2 Q2 f# r5 _
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 t9 N$ W( c6 g
  491. /////////////////////////////////////////////////////////////////////////////
    2 D4 M/ ^3 c' B! [# t8 x5 g
  492. // CRevAppApp initialization
    7 j9 G. F5 J/ k5 u

  493. 4 T$ j! e3 F7 }% L
  494. BOOL CRevAppApp::InitInstance()
    ) ~, T4 I+ Y6 y. D, \& n1 I
  495. {
      t) k8 U- g9 ~9 n1 r. ]# O( |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];9 t  H8 l9 ]2 ?
  497. 1 x6 k! C& k# U( _) {/ G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' @: Q( _  ]4 ?6 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 T5 O5 Z+ D! ^5 }1 {( T
  500.   {2 V% q# ^! Z0 m$ R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' K: h7 E8 j: O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + `3 J, I7 L* P( u; M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))9 M% o& p6 Y/ l; j, ]5 C! S
  504.     {
    4 F9 }8 f. t5 O3 _* L
  505.       strcpy(szPath,szPathTarget);
    / e4 x4 b. Z  _( p+ z' X
  506.       SetCurrentDirectory(szPath);
    ; S9 Y9 C7 u7 y
  507.     }5 }" @! R8 Q4 ^) m$ z; D6 H6 E
  508.   }
    7 o- _2 n  T8 T" l# W9 `
  509. #ifdef _DEBUG/ a0 r3 f$ Z2 u; n  \, D& l4 L
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ s8 O8 e' L* t- Z; l
  511. #else
    % o1 S/ I7 j9 v) l8 U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / a/ `& C9 h( k+ j$ N6 z3 N
  513. #endif
    8 U# Y( I8 U8 V! f
  514.   {) J3 H6 w4 g8 ]
  515.     char tempFileName[MAX_PATH];
    5 l3 `2 {6 ^! G' L9 b' |' [0 H
  516.     strcpy(tempFileName,szPathSource);* [- X& ~( N" y& L6 a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ }% t- ?3 ]/ Y* C" a
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    7 t/ C0 {0 U3 G, k* ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- ?8 ^9 h; o( T. ]) o! U, m2 G; L
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);( r1 h/ ~4 ^4 c
  521.     return TRUE;% f3 ^/ l, _7 m
  522.   }
    ' g9 H2 p9 J& M
  523.   // Nuke 0118: Delete run.exe
    % b$ x. D3 T8 n5 |/ `
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ A: x" w9 Y  a5 y2 [
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- ~8 H5 L) n4 v8 W# t8 ?! }, p  y+ ^
  526.   if(!ReadCfgFile("Config.ini"))8 X" J& C8 Y3 I$ x7 o
  527.   {
    $ h$ d: r( Q7 t; ^; G. S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " H9 M- W# t1 i- v' X: U: L9 x
  529.     return TRUE;
    7 b: V' x3 p7 ]
  530.   }
    * @# r! h, I( V! Y( |/ q1 T* O
  531.   HANDLE mutex;
    7 X! S# G; E. C# B$ d
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    * y8 a% y! j8 X- _, b. W% d
  533.   {
    ' o( c& n# D: c  Y4 \- x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS); L* m+ |& ?3 \' F
  535.     {
    6 T" u# q  F- d7 W1 @) R5 ?
  536.       CloseHandle(mutex);3 n* g# ^% w. }& K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ' x) o" [- {, ?: U* \. q
  538.       return TRUE;  K8 F% X% k; Z- f, B
  539.     }
    ( C, f7 X; N0 v% X& }  f
  540.   }  ; q+ m* T; ]: r
  541.   CloseHandle(mutex);
    + E- Q: {$ k" r

  542. ( N) ?- `$ R# s$ t) L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ n3 _3 f9 g6 q) F$ t. q; Q

  544. / _  |9 J; a: b& M" {( B- l
  545.         AfxEnableControlContainer();
    0 ?* M- w& u3 c3 L- C  K+ j. L

  546. $ G1 l0 o% `% b9 s7 r: q
  547.   bCanUpdate=FALSE;
    , u4 V$ K/ X! w/ k* p
  548.   dwStartUpSteps=1;
    ) F/ G- m. \; M/ T: d
  549.   dwProgramState=AP_NOTHING;" j, R, o4 t0 H2 J7 X! R
  550. ' w* C, h/ w7 y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  P. m2 l# k2 G2 H0 X0 f2 R  p

  552. * Y& c9 _0 K- D- x) _/ _. O  j
  553.         // Standard initialization$ _7 p6 O. m) J& J7 q' x
  554.         // If you are not using these features and wish to reduce the size8 P3 W9 J, W# r# i
  555.         //  of your final executable, you should remove from the following: E$ L) [" e" N: J8 ~, E
  556.         //  the specific initialization routines you do not need., f% T$ C  M6 h1 t4 [

  557. ) M8 e& w3 H( G, w
  558. #ifdef _AFXDLL
    0 [- Z/ Z$ k4 A+ A+ t9 D
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL& ~7 ^7 q/ o3 J7 `" b/ i
  560. #else
    5 _% j) J' X6 b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # P" \6 a: M- T( T
  562. #endif
    # X# C9 g' V$ F  Q/ k

  563. 8 d5 E; }3 B9 ^: v2 c
  564.   dlg=new CRevAppDlg;
    ) D) m" H, c2 y& {  \9 e
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + q' W3 i% C* i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , F% b- Y' s0 t  A3 V
  567.   m_pMainWnd=dlg;
    3 M  U' E* S  @& _; ^" Y& T6 {! y' s. D

  568. : o* ]2 L# t- I! k2 X  W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 e& B2 B+ z3 m5 ]: T* u

  570. , @+ c% R8 u3 ?. q- Y- J* |
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) g' Y1 }$ t* `0 q2 T
  572. //  ULONG_PTR gdiplusToken;% H4 [1 I/ D8 K# k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 _3 T) N" J0 a5 X# X4 [* C
  574. ) C9 d% M: K8 O5 z# D- J
  575. //        CRevAppDlg dlg;
    ! I& w6 A! t* C8 d# V. [  t
  576. //        int nResponse = dlg.DoModal();
    ; [: I$ x6 Y+ V0 Y) }# a/ h
  577. //        if (nResponse == IDOK)( W; k/ [" P, A: B
  578. //        {
    ' a. K& H2 Y) Z  K  d
  579. //                // TODO: Place code here to handle when the dialog is
      Y/ w9 ^5 q, n% T( s
  580. //                //  dismissed with OK
    3 \! e( h4 X8 e, |' M+ ^
  581. //        }3 }6 h- k/ x. M# s' a
  582. //        else if (nResponse == IDCANCEL)( y$ p* o# k) Y3 V  ?( n
  583. //        {1 B' e9 D3 u6 {* J5 E
  584. //                // TODO: Place code here to handle when the dialog is
    6 d. F5 \$ {- ~  t
  585. //                //  dismissed with Cancel
    + R& ~- f6 f( s
  586. //        }7 Y/ H: W* N% N$ Z9 \
  587. 8 a, a' G% W* d
  588.         // Since the dialog has been closed, return FALSE so that we exit the" N1 j& R, c4 |/ P, r
  589.         //  application, rather than start the application's message pump.
    9 U3 k: K8 Q7 H/ Y
  590.         return TRUE;
    ! m. R* s5 n3 }( z9 b6 a( `
  591. }8 P- J# E5 {3 b

  592.   x+ e3 u3 d: I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 Q& P9 G& X6 c0 U$ ^3 H$ T
  594. {
    7 }4 |, m/ I% T( b1 K8 w
  595.   int i;; ~. Y* j" a5 `; @$ E" b
  596.   char *szRet;' C2 ~% F, a9 I% ]) z% x0 Y

  597.   R8 p, c8 b3 V4 v! |" n2 ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) B; m9 H3 J4 Z/ G4 d- X0 `
  599.   if(sztoken)
    $ T" ~4 g# R# x( A
  600.   {" z; c: R1 @5 p
  601.     szRet=&sztoken[itoken];9 P, t5 S' `! \, C+ M' R8 a
  602.     while(sztoken[itoken])
    % `: V8 `2 ]* w/ R8 D- }
  603.     {  E0 B2 q7 e  b" j5 p; A0 E
  604.       for(i=0;i<(int)strlen(token);i++)
    9 a* f/ t) A# l" }/ i$ C" K" m4 _
  605.       {
    5 C/ R' }1 s/ x. Q$ ^1 b. p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' B3 f. p# Y( q, {( W# \7 K5 b
  607.         {
    * r# x, h/ G8 l8 [
  608.           sztoken[itoken++]=0;: a% i: ]  O" }
  609.           sztoken[itoken++]=0;
    $ |8 i( O3 v" P5 `4 E
  610.           return szRet;3 C, a; \7 E; X% ^; k# L
  611.         }
    ; v2 f& t/ L( T& a; y' V
  612.       }4 A9 P5 C) W* o; r& m
  613.       itoken++;/ K4 i+ `( S4 g  V
  614.     }
    # q9 d$ H  `1 D5 P# r( @
  615.   }
    0 A% [3 m2 ~: f, o( R
  616.   return NULL;. v8 ?* @8 E: ]( [# f
  617. }
    , p" b7 M' u4 H8 [9 X+ Y2 b
  618.   I8 `, W# v' u3 u0 o! j# F
  619. void ProcessProc(long Total,long Current); Q0 K! n! t0 |
  620. {
    / ~" G8 w0 C% r; |/ J5 q
  621.         MSG msg;
    ) z( {0 Z. F2 K8 N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" d+ j0 Z1 L; j: q# m$ P' n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 r  O: f: d3 j7 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    2 M/ i6 q( d$ A
  625.         {2 a) Z4 X4 I* g& n% r( b
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - X1 G" D' d2 J! }3 M6 ]2 h
  627.                 {
    8 N4 e  l7 c4 w4 L+ [. k
  628.                         return;6 {9 w) n0 V9 C, T5 j4 H0 \
  629.                 }% [# B" ]% B. u/ \
  630.                 TranslateMessage(&msg);2 F  d% R. ?% t5 e; d
  631.                 DispatchMessage(&msg);
    / }" U- d$ U, i0 z1 K" G# T
  632.         }        8 i; x9 U! L$ _( ^2 E
  633. }
    . I( |+ h3 G5 H2 b3 a  T7 N

  634. 2 Q; i2 y  F7 d0 Q
  635. BOOL bFirstChar=TRUE;
    ( @* B7 d. J% M- _& Q
  636. $ }/ V: b' B) N* D7 _1 z) Y3 K1 {) \
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 \/ ?6 C0 h& V* o/ }3 O+ e! I3 y7 @
  638. {
    % ]0 E* y/ K9 {
  639.         // TODO: Add your specialized code here and/or call the base class# }2 y  o: A" p& D: X) Y; ]; a' ~9 n
  640.   switch(dwProgramState)
    4 W0 A! C. k  i0 Y8 S# Y7 n% |
  641.   {: z5 s/ p! v9 f: H9 j8 s5 N6 C$ M
  642.   case AP_NOTHING:) _! u2 `7 G" V7 N; v
  643.     switch(dwStartUpSteps)9 G5 w  V9 S) d' w  |
  644.     {
    & `+ _! m4 _. t; T- M% R* t
  645.     case 1:; r! J* o$ g5 j$ E7 X- K2 O
  646.       {1 A4 `: B3 l8 G) H$ f
  647.         int i;
    1 s; |5 z5 H9 f7 {# P
  648.         CDC *pCDC=dlg->GetDC();2 s0 S' S: J9 k6 j
  649.         HDC hdcwnd=pCDC->m_hDC;# g: @9 b" C5 Y7 D9 C) K
  650. //        Graphics graphics(hdcwnd);$ X$ W: O3 D. ^1 }5 h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");6 m$ `2 i" j9 M% {! e: U: }; G
  652. //        INT iWidth=bitmap.GetWidth();
    8 _0 S( P% I$ l3 P
  653. //        INT iHeight=bitmap.GetHeight();
    # v/ Z3 Q+ l1 g1 y
  654. //        Color color,colorTemp;* o' z! Y( l& n3 r) _# X9 e9 L$ V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 I: @7 M, N! z* G: H) R; ?
  656. //        {
    ; H" y; D' b3 F$ [( _) B" O
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 H2 ]& Z% l6 L& w1 W4 G
  658. //          {
    : p3 q" ^% c/ {9 p3 ]) {+ s: A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' n' X" C+ I/ W" |# L( ^
  660. //            colorTemp.SetValue(color.MakeARGB(! I7 W$ O# |+ P# L7 [$ ~
  661. //              (BYTE)(255*iColumn/iWidth),
    ! f; S3 S9 V8 w& x" N) _$ U
  662. //              color.GetRed(),
    : A5 ~( t0 T, _! R+ @" s2 _( F
  663. //              color.GetGreen(),1 j, A. }0 p9 R
  664. //              color.GetBlue()));4 j! h7 U7 b( E) X8 d; O9 d; x
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; O. e. h  Y) I) p- v
  666. //          }) n, \+ w6 p: r( w
  667. //        }; ^8 h* w6 u; M2 m. b  o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# _3 c2 L. @) |/ Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      Y' X9 a& A& z: x+ D! J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " @; c5 r2 z- f# j/ K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 U$ P0 b9 r7 g
  672.         for(i=0;i<240;i+=8)# t( w* U% R' q/ u0 n2 X( \
  673.         {
    + {* P6 v( n# o- x! |* ?. Z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 m) M: N/ M( ]. y! @# _) Y; L- A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- I) I( l+ m1 _' r/ L0 @+ e! _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % `( p* c% v( z/ |$ B1 V
  677.           Sleep(33);
    9 V8 e" ~5 G4 ^3 h' a% G
  678.         }+ k! F$ y7 i% ?- N
  679.         Sleep(1000);
    ! ~" U; w7 q& U9 m$ N9 t$ U
  680.         for(i=240;i>0;i-=8)
    , k2 B+ S$ h+ M9 `
  681.         {
    . z2 x( k! d' P6 P  J: B
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. C! f: g1 H+ g/ `# F9 D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 y% o  e2 G& U0 W/ }/ V# Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) _! B3 Y4 K) h) [/ V
  685.           Sleep(33);- f4 O: w* z- I% r3 y% \
  686.         }8 N2 j5 V& Y* }: y$ V( p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      C2 ^: |' O$ N# @; {
  688.         dlg->ReleaseDC(pCDC);5 B' W" M% e  w7 J( V1 s( y# H2 y
  689.         DeleteDC(hdctar);) |& J* ~' R5 v) s8 z
  690.         DeleteDC(hdcsrc);
    2 E5 I! x: q# Q+ u" Y
  691.         DeleteDC(hdcorg);; s  K; k# s8 ?; j. D
  692.       }% S, ]1 d  V  O% y! A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 ^" E3 ^4 h3 u. R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    7 _" {2 o; i% \% F4 S0 A8 ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ! a% r. g4 r. Y4 I# [- {  S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ; u/ i; W0 I8 @' J# ^  Z; E: {6 L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# _: r! H9 N1 D0 S1 {
  698.       if(!Dn.Connected())9 D9 |6 c8 i+ F( Z/ t  C
  699.       {- o, Z3 U0 T& n/ @3 {- z* E
  700.         dwTotalFiles=1;8 V6 ^* [- f0 A1 \7 f
  701.         dwDownLoaded=0;
    5 X4 T. n* g9 i% }" u6 u9 M
  702.         bSilentStep=TRUE;! C; F2 [* T0 w- f& Q! n4 l/ X# {4 }
  703.         bCompressed=FALSE;
    9 ^) w' x3 m& w9 p" z3 ]4 k
  704.         strExtLocal.Empty();
    , |" o) e8 h4 t* d, Y
  705.         strFullName="readme.txt";
    , e: w  H8 Z! r  J# N( }
  706.         dwProgramState=AP_CONNECT;; D* H: I1 Z. o; }& Q$ q. T
  707.       }
    0 I1 G6 N- q4 S8 H/ N! `/ \! F$ r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ! B2 w3 a) R  V, `4 J) @) M7 ?
  709.       dwStartUpSteps=2;
    . I3 K- ]& N" T% T0 a; E1 e6 |
  710.       break;
    " h5 }' q4 W+ J$ Y# g- T3 `, Q0 {
  711.     case 2:
    " q  U! \$ w) |9 t/ j8 l
  712.       {- g: R! ^7 J7 Y. j/ N
  713.         int iEOF;
    ) w( i- e% ^% B1 w( c5 N
  714.         FILE *fp;% r/ f& W+ }. {8 q9 l! W+ X* @+ ^
  715.         char szString[512];. i& A' u7 Q! }4 A" Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 Y6 V3 l% W- l. X: `
  717.         if(fp)
      h- ^$ v: }" i6 X
  718.         {9 \/ ]) f0 ]$ e+ U: d6 S2 W
  719.           do7 [# t8 x; t7 v+ T5 @: O2 \
  720.           {! f' u8 ?* Z* x/ ]
  721.             iEOF=fscanf(fp,"%s",szString);5 r8 p# w, h  k& r& }1 e( c# v9 O
  722.             if(strlen(szString))
    0 U2 Q% Q- ?4 U4 u( m  f
  723.             {; A0 J) z5 R) d. j6 s; ?
  724.               if(bFirstChar)
    8 W3 \5 L  q  G0 F! h6 z' m
  725.               {: \% s  c/ |( L% t& ]
  726.                 bFirstChar=FALSE;2 o* R" R# Y3 v# o7 X
  727.                 bConnectIsBig5=FALSE;& g5 Y1 W1 B1 o  o# x
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( Y2 w- J1 e9 {' J, \
  729.               }
    : l5 @3 P  ^, q1 U, b( v
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# z  c# D# A: p  H2 t9 |
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) n7 `6 D1 `3 x, b- j0 d% ]8 c  h
  732.               dlg->m_ListText.AddString(szString);1 w' f% o8 O, k( r; I2 k
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 T& q% b# u1 ~$ g1 w: I. e- i
  734.               *szString=0;# b5 g2 U8 ~4 y' Z+ I( ~# I
  735.             }0 R# v, D* Q8 ]: I3 M- S3 _
  736.           } while(iEOF!=EOF);$ n; w" n% ]# W+ ~  f8 [# S
  737.           fclose(fp);
    2 y6 e" |  {1 S1 V6 W) g* D! E
  738.           unlink(".\\DownLoad\\readme.txt");
    : {) f6 s6 w; ?1 O$ V* a
  739.           dwStartUpSteps=3;% v, g( V# L$ I. S5 E0 ^* W
  740.         }
    : c# j6 b+ ]: }7 z3 a4 M7 \
  741.       }; d" N! W$ \7 c' m4 J6 ]
  742.       break;- I5 {; C1 g# V2 j3 o$ V! ]
  743.     case 3:9 o/ {- H0 m: ]
  744.       if(!Dn.Connected())4 x4 _9 Z8 q) g; ~
  745.       {
    + E6 k( b2 W4 h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);' {4 }8 ?+ ^% \, }: C' f; G/ u
  747.         dwTotalFiles=1;0 R$ y5 [- G/ B
  748.         dwDownLoaded=0;/ p7 W6 K) s6 }$ Y" s
  749.         bSilentStep=TRUE;( [& e/ u# M: d) C: }2 d
  750.         bCompressed=FALSE;
    9 g+ f2 u( g! Z1 G( s
  751.         strExtLocal.Empty();
    0 u& ]8 f9 |& j# \/ S
  752.         strFullName="checkversion.txt";
    ; c8 _% I( T# Q: }6 |
  753.         dwProgramState=AP_CONNECT;
    1 a4 |  D1 x. L, P9 Y; D* J
  754.       }
    # R8 n6 I! u, r. S
  755.       dwStartUpSteps=4;! ^# ^# T$ D5 {  A" i) \* D
  756.       break;9 M0 T* ^; \9 {8 G4 B8 B+ j
  757.     case 4:
    0 i, e2 u% G8 ~0 X
  758.       {% k6 x& l* ^/ C
  759.         FILE *fp;
    * O" S+ R% I  P7 q5 {: Z, g" T; k
  760.         char szString1[128];- Q" O# e3 _6 a
  761.         char szString2[128];. X& f# d2 X2 L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! a0 t& m- \1 b+ a5 m1 j% {
  763.         if(fp). A! N. i2 c9 A3 H  N, n
  764.         {
    4 d2 y, z, Y5 ]# d
  765.           fscanf(fp,"%s",szString1);
    ! {# }1 d9 K5 _/ {
  766.           fclose(fp);% `" n7 W; Z3 x9 x7 Y) I; |8 U
  767.           fCheckVersion=atof(szString1);9 i* T, ~) ~* O$ B
  768.           fp=fopen(".\\checkversion.dat","r");
    ; H; o/ j& k7 ?8 R
  769.           if(fp)
    5 Z1 a7 ?* B, j- B4 x
  770.           {
    3 z) W9 y. v4 D. E
  771.             fscanf(fp,"%s",szString2);+ \, D7 ~+ O- y: _" a
  772.             fclose(fp);% q% k0 e: o  d, N. D! E$ E
  773.             if(atof(szString1)!=atof(szString2))
    : `( f# N2 W/ g/ L2 d' g; h
  774.             {- Y) H1 Z, y4 ^8 R, H8 y5 p' a
  775.               if(!Dn.Connected())
    # J1 f4 q# ?: |! `) K# C
  776.               {
    % i- [+ N; j5 y* s* _: d9 {9 U3 y
  777.                 bFirstUpdate=TRUE;' V4 u4 T: Z1 l* ^
  778.                 dwTotalFiles=1;
      b* E, ~: I' @1 G* ?& p
  779.                 dwDownLoaded=0;
    5 i& q/ z% ~4 u
  780.                 bSilentStep=FALSE;* H" T/ x7 T( s% v0 a
  781.                 bCompressed=TRUE;
    3 \- R$ _) Z& ]( V1 w
  782.                 strExtLocal=".\\DownLoad\";
    + J% x: v& v) U! v5 l
  783.                 strFullName="update.txt";3 S' {& F. ]- ]% C% E5 x
  784.                 dwProgramState=AP_CONNECT;
    " V/ @9 }8 B) d0 c+ v3 h% R
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 M- j; z) Z- I& V* p5 |* {0 l; `
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / B$ G1 b) M( P! P. i
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % p3 I! {! z6 {  e$ [  k

  788. % ?. V9 V% y* B+ K* t- [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " m1 G0 D) @, w3 B* m7 x
  790.                 unlink(".\\DownLoad\\checkversion.txt");7 g6 W6 n2 n( x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , c$ b6 j  x1 ~9 m% A+ D
  792.                 {1 H' K+ S. p, U( o1 D7 R( r. j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , P6 e  T- I+ ]2 P+ P
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( E' j, H; K5 s$ u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' u6 f8 f6 h5 X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( ?5 r" I- H/ J4 p' D' s
  797. : T# t. U1 B3 J8 r5 ^: a
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & f+ [# v: o- W# k. u! q& c5 M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 i: A, v0 b. H; V0 R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' I. T0 \: A9 T% G6 }( _
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ \, D1 P1 ?  ~1 n$ Q
  802.                 }
    8 v' A& X) ?$ M4 i
  803.                 dwStartUpSteps=5;, ~2 B: D7 l' \; L2 ]. R
  804.               }* t/ p$ U$ ]5 R$ Y- s$ s" q
  805.             }' m1 R0 A$ Y3 S+ R2 j( a, \2 D+ r
  806.             else
    9 m9 a6 G4 j4 X3 y6 u. h. Z/ V2 {
  807.             {3 x& u5 Z0 ~, F# ^2 T& W% j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( G/ S7 A- Z% l: S! e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- ]: V. e" C) f5 Z6 p$ L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- F. O9 A' O5 l( J
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. F' U7 Y  Y1 B" n( {

  812. ) s4 G: Z, s6 z  }+ }
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) _" x  N0 R1 ~" J1 z/ v5 F% F
  814.               dwStartUpSteps=99;
    & [- s' n( }, ~! f% P2 y
  815.               bFinishUpdated=TRUE;$ k- V- c9 z% z/ o6 j) O4 w$ u
  816.               bCanUpdate=TRUE;
    / |, s5 n  f( m7 B1 o5 F
  817.             }
    4 x: q) X) N" z& o- X0 ]! f, r
  818.           }
    3 q6 n3 M9 s, \; c
  819.           else: }. g0 P1 |+ Y" t$ Q
  820.           {% w: ^% d. K) j) T1 `; O2 A1 K
  821.             if(!Dn.Connected())4 J) O2 M. O3 t+ @
  822.             {
    3 n0 |9 \/ v0 g2 u  `
  823.               bFirstUpdate=TRUE;7 D! g0 F  j) }3 V6 T
  824.               dwTotalFiles=1;( W% C# Q+ R5 |
  825.               dwDownLoaded=0;/ _" i2 ^/ e, O( A
  826.               bSilentStep=FALSE;
    + o- f' }# I5 q( ]
  827.               bCompressed=TRUE;
    0 h# ^" K* j5 v$ T1 j. l
  828.               strExtLocal=".\\DownLoad\";7 Z* D! P# @( t) u; w" K) |
  829.               strFullName="update.txt";+ E" s) s, a7 P9 V, X+ n4 S
  830.               dwProgramState=AP_CONNECT;
    ) l7 i% k2 f8 J3 ^2 I4 v3 t0 M9 `; |
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : t6 q. H/ ?- @% o- Z: q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 v  Z# H/ G2 Z) L
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 j- l4 p% I  ?$ Y( P) `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * {4 n% t0 k1 p
  835.               unlink(".\\DownLoad\\checkversion.txt");
    / \9 I6 B6 y2 ?" m; y/ K4 z/ w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    " m3 S1 W: F8 Y2 G. B7 T
  837.               {* s; \- k) q" C4 s6 [2 g9 |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : x2 D) K6 j( e, O" Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 n' |" T# y; Q4 N1 L
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , w# k) z+ o$ }2 e0 K+ _2 ^  u
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % j1 S  X, C6 L, l1 j8 m2 _5 o+ E
  842.                
    + Z8 u0 A, [6 `* t- O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; u- y) F! v1 I" f- M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- x  x- I% O9 q0 H: ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) T3 Z2 s+ U5 ?) Z; K4 p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! w7 E0 }2 Q) M8 Y5 V2 A
  847.               }# }) H2 {: ^$ D
  848.               dwStartUpSteps=5;
    & b1 x! r" y6 X
  849.             }
    ' M" a5 p) B; h, l; T% O
  850.           }
    * E7 T% k! I  }; I
  851.         }: g1 T0 Z" v2 g. t5 v7 \
  852.         else. v. W9 s& {( w) M
  853.         {
    * ?/ M7 d) ^: t9 E6 J- `
  854.           dwStartUpSteps=3;
      Z: X& M/ J" ]+ {( ?2 A! x
  855.         }
      m) s: X) v9 y) A& g/ w
  856.       }
    4 R' V: T9 |2 p" r; z9 w& E
  857.       break;
    : u/ [6 R6 W! T1 p7 q- Z
  858.     case 5:% t- A0 e) w6 C4 u( m$ c
  859.       {
    / N0 _9 w; Y% u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! ]+ b. b7 j& f1 W5 l  q
  861.         {5 L, x" w- ^7 R2 u+ g7 k
  862.           int opt_overwrite=1;
    / d+ i/ @+ C0 p5 Q# {
  863.           int opt_do_extract_withoutpath=0;
    ' E# r+ m- m2 H: Y- g
  864.           unzFile uf=NULL;4 e- ~0 `9 Y  w7 q) n" |3 {) N
  865. 9 e* h) d$ p: |! i
  866.           uf=unzOpen("Wsa.zip");6 |# V5 ?& P; I% ]& L, Y' A4 r1 ~
  867.           if(uf)
    # f, l6 r+ {) ^9 q, G6 r
  868.           {
    ; z: G- B* g3 t
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , Z6 D3 `' e/ H9 p$ `& e
  870.             unzClose(uf);
    7 j  c0 J' o! R: X1 e. x) v# y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");1 Y  P( P1 ^! S2 [9 S4 @6 g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & X& ]* {4 b* C4 A
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # b9 f! ?% M+ `2 h
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 c0 F1 M6 e$ y
  875.           }( c! W7 C( l$ l: y& `, j. s
  876.           DeleteFile("Wsa.zip" );
    ) F. O' O1 \& H
  877.         }
    , T5 t: |' p$ Y
  878. 3 e2 t8 ?6 r# ?
  879.         if(CheckLocalVersion())
    6 t+ U% G7 Y) S- h9 a. I# Q7 n5 E
  880.         {4 r( M/ s2 s$ z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ u/ v9 m7 T' x% E5 \/ {: w
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");" V, J$ n6 A9 _3 N6 {% z8 R% \4 E
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    $ f( N. v; X: v: w3 h4 H# l( |
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # f: v' ~, B7 s! i
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    % r$ w3 S( H0 h* f4 Q& l
  886.           dwStartUpSteps=99;& R1 C. `: y% E' J8 u; z
  887.         }
    # x7 i5 C) {3 H
  888.         else3 @5 |* B4 }, {3 W/ y3 W
  889.         {
    : ?7 W0 h2 \4 q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ m  {" B5 [4 D" Q" ^) }
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : f2 @. f) v3 U' `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' @: R: _$ G$ L  e

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

/ M, I0 P; [% v9 o9 ]
, \3 B: Z# b- F5 L* e8 a6 ]

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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