CSUpdate.exe源代码

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

" Y8 a+ {. d  M5 J+ r; ]3 r
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , Q  u' m5 M3 [" F9 ?  D
  2. //
    $ I  `& U5 N$ K+ W
  3. 6 E# x  b$ J: A0 X: F
  4. #include "stdafx.h"
    6 |' I, j. k% q/ G5 m1 n# s, N; q6 p

  5. / Z! \( V6 Z2 K. R+ d- j
  6. //#define UNICODE
    ! j9 L! d0 X! a  `( r+ {$ O
  7. //#include <gdiplus.h>2 t- ]# H8 }3 R
  8. //using namespace Gdiplus;( }! ?' P0 W( n/ @

  9. $ g8 a, w% O; b  C- o
  10. #include "RevApp.h"% }" _& ~5 w2 o% V
  11. #include "RevAppDlg.h"
    4 P2 H, k+ h9 A) l( e
  12. 4 l! l: i+ c  m* \$ v- o% w
  13. #pragma warning(disable:4786)
    ) p, F" f6 F$ ?6 C! ^$ V+ y: i1 u
  14. #include <map>
    . O' X2 P# Q/ M/ h; O0 K1 Z+ ?
  15. #include <list>. g1 O& |1 Q" p: Q! f
  16. #include <direct.h># r! {9 m9 J3 @0 W2 G

  17. # \0 U+ `* Y& j+ |
  18. #ifdef _DEBUG
    3 ?$ ]1 v) s+ U! _
  19. #define new DEBUG_NEW/ |$ K! ], T+ E; R+ V) j9 B* }4 v
  20. #undef THIS_FILE3 v* \8 t# U) E# i8 k( s
  21. static char THIS_FILE[] = __FILE__;
    4 p+ {5 z) _& O* X5 v7 R) t
  22. #endif
    " {$ R# y9 b9 F+ L
  23. #include "SkinResDef.h"
    5 y/ `& S5 a% k# N1 G2 E
  24. #include "ChangeBG.h"$ U, U! D  y5 K0 [0 d0 k
  25. #include "AFXINET.H"5 s! |" Z7 Q9 Y+ v* {

  26. 4 O$ s) A% f4 K" p& e" _9 e
  27. #define TRADITIONAL_CHINESE 0
    - Q) c3 [0 P2 P6 B! D8 H( U
  28. #define SIMPLIFY_CHINESE 1
    8 a* J7 P) s. E  p, {' s' g
  29. #define ENGLISH 2
    " Q" L0 r- O' C1 f- m! @. H
  30. int m_iLanguage = ENGLISH;; f* k2 M: x8 s" O4 ~% Y- Z4 d
  31. /////////////////////////////////////////////////////////////////////////////
    / V& w5 L' \2 H! }* C6 r
  32. // CRevAppApp$ ]/ O7 j& I+ i" o7 B1 W

  33. ! p; f" H/ i5 n( w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" l4 v  l5 G( |, t
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 ~. L# Z' }# {3 @+ _7 f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : y! ], n. f3 M) H( ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" X3 r" V/ d( I8 X8 `; U# }
  38.         //}}AFX_MSG: n4 k9 ^. s4 q1 ]5 ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 m9 J9 N5 A  i
  40. END_MESSAGE_MAP(): U5 W* D* n- D+ [& Z  }

  41. ) W; S; V8 A/ V# e$ v' e# V% d4 L
  42. /////////////////////////////////////////////////////////////////////////////6 ~- U- @5 s" h/ u5 Z) T1 L( m6 t
  43. // CRevAppApp construction
    ) w0 C5 Y7 p* @2 g( V- x" z, w

  44. ) _5 @2 r! I) v" l2 f8 O/ y. B
  45. CRevAppApp::CRevAppApp(): l* t4 G* f' w' ^0 y: c
  46. {
      @# K' `: ^" v" u2 y
  47.         // TODO: add construction code here,
    ; Y7 i' p( d$ [' r& v$ G1 d3 X
  48.         // Place all significant initialization in InitInstance
    # i5 K8 m& B* ]5 x6 e7 d
  49.   bDisplayIsBig5=FALSE;
    ) t- I" V: ^1 n' H6 }# k8 K/ A
  50.   bRestartUpdater=FALSE;
    . E1 h& M8 s9 F8 \. I( E$ _
  51.   bFinishUpdated=FALSE;
    ! T9 W0 E0 j9 q# Z1 d7 c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 N9 T4 N  [5 H
  53.   InitChangeDataBig52GBKS();
    5 }, O+ [- P$ r
  54.   InitChangeDataGBKS2Big5();
    - s7 X) f0 c$ u4 l
  55.         //5 Z8 q* I1 s; P# n6 B& q& B: B3 {5 ?
  56.         bClickRunExe = FALSE;
    / D( `2 x6 a" O& p
  57.         //) z: ~% n7 Y( ?
  58. }
    : i4 J  \4 J3 a+ X4 Q! D$ k
  59. 3 S) A1 w; d3 ]% i5 ~
  60. CRevAppApp::~CRevAppApp()7 e, V) W2 m3 U  i, b
  61. {
    ) w0 g$ j% ]* `* w5 K
  62.         // TODO: add construction code here,
    1 e" p" `0 k8 B8 J6 }% z
  63.         // Place all significant initialization in InitInstance5 U+ e; A" U$ w5 W
  64.   EndChangeData();/ x! \: D  n2 b
  65. }
    & m( Z. U+ {+ E# L
  66. " Y6 P5 C( b$ \0 x9 N
  67. /////////////////////////////////////////////////////////////////////////////
    ) a3 [$ F9 O) T
  68. // The one and only CRevAppApp object" `5 L' a' z5 S5 P* }4 @7 ?5 @8 p
  69. 7 X" {% m: S  I6 l% k# ^5 b3 V
  70. CRevAppApp theApp;
    : r+ a# }$ g. Z1 _) B6 M

  71. 1 m( C+ r% N- r+ w7 m1 p& m/ I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); O: v0 ^6 G! [, c
  73. {
    6 X" l& F  D5 o& k! ]: b* d; v
  74.   int iEOF=0;
    + |$ H" k" L- F, ~( G1 M
  75.   char szTempName[MAX_PATH];# y! u6 |* y& @. T# |
  76.   *szFileName=0;6 d' D; ]8 G+ M6 {" {/ W0 C
  77.   iEOF=fscanf(fp,"%s",szTempName);
    / k6 q3 h! w7 n  f: H& b6 J& ?7 A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . M9 y2 m0 H( l* X/ I1 O6 N" ]
  79.   {
    7 U8 V' h6 P' Y2 r4 |/ m' G
  80.     strcpy(szFileName,&szTempName[1]);
    , R9 x) L; ~5 j$ I; c: {1 w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 O) l0 Q% @4 y  s5 `
  82.     {
    / W+ P" J6 k" u
  83.       iEOF=fscanf(fp,"%s",szTempName);8 a+ r, [7 i. E7 m/ Z6 J7 B4 E& |/ x
  84.       strcat(szFileName," ");* W/ Y' K# x0 H' [
  85.       strcat(szFileName,szTempName);$ L& o9 M( B! b% G" [! s
  86.     }3 p! l& |4 O7 Q6 _/ x' r& |
  87.     if(strlen(szFileName)>=1)
    ' m# B! [, C0 h" b  [: Q+ j( w9 R
  88.     {, P3 D) T. |8 Z8 ]; d0 s7 l
  89.       szFileName[strlen(szFileName)-1]=0;
    7 e5 n, m/ }, E2 [* `' V$ b9 t
  90.     }5 ^* z2 Q6 @- R* t
  91.   }% d' ]) h9 f& W6 Y/ w' q: _2 i8 p4 |
  92.   return szFileName;, x: u* L, j, L+ g( J- Z3 A. Z
  93. }
      P" F2 m" L* a) d7 P/ J& P5 X, ?% V, l

  94. 3 @  ^: c# ~! {, B# a: w' r9 C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile); ~5 j2 V' G3 ^
  96. {- F6 n% ]: ^& l5 _1 h* A
  97.   FILE *fp;$ ]8 H8 L3 I, Z! q
  98.   char *key=NULL;
    + s6 {6 D( K' u. r: r; P( ~& I
  99.   char version[MAX_PATH];: h  }* \7 l8 ^
  100.   LPUPDATEFILE file,olds;
    7 i! l. n$ [( P3 r1 ~
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 k  ~: s0 G- j0 `
  102. # u6 b" ?& f$ P
  103.   UpdateList.clear();
    / c  |  h* F$ @! z
  104.   UpdateFile.clear();
    ' b! Q2 g5 e* q: {9 q  |1 o3 q- X" B
  105.   if(GetFileAttributes(filename)==-1) return false;9 L. u/ P1 O8 h
  106.   if(!(fp=fopen(filename,"r"))) return false;2 h0 V6 {( R: c
  107.   fscanf(fp,"%s",version);
    ; a/ o8 ]. C5 [& S% L1 G) p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 P8 e' t. W8 E5 I; j# I
  109.   while(fscanf(fp,"%s",version)!=EOF)5 a" n6 Y# A. |" Z2 Y
  110.   {+ G* [' `! \3 X4 m) [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" O- [( L. A- u
  112.     fscanf(fp,"%s",file->path);
    " p' z. i/ S  k2 i
  113.     ReadFileNames(fp,file->file);. o6 F- M, ], F! j6 I$ s2 p: ]7 O
  114.     strcpy(file->full,".");
    : z0 Q% Z$ a6 \) p" r
  115.     strcat(file->full,file->path);
    * I% x9 A, {$ x8 d0 f
  116.     strcat(file->full,file->file);
    8 U0 Y- O+ y7 P, ~
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . Q; Y( P$ ?3 Z' h8 T+ c# l
  118.     {
    # F9 D; l; S: B: e9 e2 Z8 F9 Z9 i- a
  119.       file->vers=(float)atof(version);  U9 b1 S- {& h. x' H7 U4 F
  120.       UpdateList.push_back(file->full);
    & L  B+ w+ s" j0 t( C) g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% F1 X2 p* o, C; z5 D2 z2 f
  122.     }
      L/ x0 B; T0 J% y' k
  123.     else$ u/ r9 |6 d# J) h' l; N
  124.     {
    . _0 W$ k, v8 }! j" z$ `
  125.       olds=(*p).second;
    ' W6 l& @7 e8 d2 {: Y
  126.       if(olds->vers<(float)atof(version))
    * n" W1 e5 s9 ?
  127.       {8 @  T' M  w" C  c6 o9 t
  128.         olds->vers=(float)atof(version);
    ; q; v" ~6 ^* r
  129.       }) U, Q/ _; V& a% o% Y8 M
  130.       free(file);3 c" J7 Z: v0 N6 Y/ j3 h, E3 F
  131.     }
    : G+ z" s/ N; F, n
  132.   }
    # I( \# _+ x9 S/ T! a0 j# o2 i
  133.   fclose(fp);) }  ]1 P6 H) K6 j7 q
  134.   return true;/ N6 }4 x- I( e9 v, h5 C; h2 l5 s
  135. }/ t/ q7 Z3 @  A4 `
  136. ( N* x# U( q. F4 }; b+ E4 X( M* A6 y9 G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % l: y* q4 f# ^4 {( r; _
  138. {5 X! ?' k# i8 }6 ~% d4 B8 n6 c
  139.   TCHAR  szFull[MAX_PATH];, x, c8 J; _1 n. E# l3 f" m
  140.   TCHAR *token,*inter;* p. f- ?9 c, v- Q1 U2 N; s
  141.   *szPath=0;2 L- \) Z: n8 p
  142.   strcpy(szFull,szFullPath);: J  Z3 _1 B7 G
  143.   token=strtok(szFull,"\\/");
    8 O' [! e  E7 [) V/ r& f, v/ w
  144.   inter=token;
    6 P2 b0 u& G/ p# r! r6 {0 \
  145.   while(token=strtok(NULL,"\\/"))
    ! L" ~. C/ |! i7 [* q8 l
  146.   {6 j' N# m4 H3 E
  147.     strcat(szPath,inter);
    6 ^5 T( S' C0 D& f; {8 d2 y( P/ `
  148.     strcat(szPath,"\");
    2 N2 ~" b# Q; M$ S( Y
  149.     inter=token;
    4 R+ x' Z# B. O$ u
  150.   }
    ' J; Q& m4 }* K4 |! M1 d" j: z
  151.   return strlen(szPath);
      T* z/ r% Z# i! T4 n) V
  152. }; N' X$ X+ h' f' R: ~; k

  153. ; F( N0 Q- Q0 W4 k& A, @* f7 d7 ^
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ P6 J2 i% Y! D' E
  155. {
    . Y0 t/ ^8 h) k; t' B* z
  156.   DWORD attrib=GetFileAttributes(Target);
    2 `1 H1 F+ ^+ ?  h- J
  157.   if(attrib!=-1): Y& P3 h0 X0 B1 b
  158.   {
    0 E+ r+ k& O1 R% \" D! _( E
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% t$ c# G2 D+ n% |! J0 k7 V( c
  160.     {% a7 r* D; O6 N- y6 F1 \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. v) Y! j$ [! X: I
  162.       SetFileAttributes(Target,attrib);( t  x  \3 f# ^+ t. L
  163.     }
    * C/ U# R$ S8 G& K8 z
  164.   }5 d+ |7 |7 a+ Q3 p
  165.   CopyFile(Source,Target,Erase);2 M( C8 ]# J/ w0 J
  166. }
    ' o: |7 j! Z9 @) \
  167. 1 K1 Y$ Y% t5 |, ]: o2 h3 Y/ R0 Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! w# }0 z' P3 A3 O
  169. {) a4 o5 m/ ?  y0 p, }8 g2 E
  170.      FILE *fp;. b# q8 A  H( i; W. y! G
  171.      char  szBuffer[8192];
    ( e8 r5 U$ i8 n9 `: Q  I/ F
  172.   va_list  argptr;9 \% h7 e& m, I3 _. I# b

  173.   g6 T0 L7 Y* Z1 i/ c( _; ~
  174.         va_start(argptr,message);
    5 R6 u2 C' l- W2 o/ N
  175.         vsprintf(szBuffer,message,argptr);
    + v9 _3 ~  b& U" ^! j
  176.         va_end(argptr);% k  h. W4 `5 U% F) i- p
  177.   fp=fopen(FileName,"a");
    6 q* i, H0 V: {7 W8 b
  178.   if(fp)" }3 Q& T+ N) a/ k4 _  p
  179.   {/ s& c. D% M( |7 q( `1 p
  180.     fprintf(fp,szBuffer);
    3 s# J& Y) \0 g  T; s
  181.     fclose(fp);1 \5 T4 a% }4 U' z
  182.           _flushall();; F2 ?  \  ~9 x, L
  183.   }, U$ d) D# J4 }! }
  184. }6 v' D) e. |" H+ |+ y
  185. 9 d6 v, B6 U/ z2 g: D! I
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! G! c4 K: {. D5 r
  187. {
    ) x/ ?- _( G  C, ~6 x/ z
  188.      FILE *fp;/ J/ r1 N4 F3 V' c& c' @
  189.     DWORD  attrib;( U: b8 }* `0 _/ m$ }" Y1 ]
  190.   attrib=GetFileAttributes(FileName);
    8 f4 f1 K& J" M  h2 F) {
  191.   if(attrib!=-1)$ Q8 f; Y0 L+ s5 v
  192.   {
    , P$ a: ^/ A7 M) j" E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) W2 g0 P5 Q5 h* I( @, b
  194.     if(!SetFileAttributes(FileName,attrib))
    & w2 V8 [5 F6 A0 W
  195.     {' W! d6 E( A2 \( ~# t+ P5 ?
  196.       return FALSE;5 T  ]6 q) Q/ _" w4 i) Z  {( V
  197.     }
    ) q& B) Z) _+ l* z" J
  198.   }& X) h6 I  X1 ^9 Y  G
  199.   fp=fopen(FileName,"wb");, B0 {& _& Y$ N! S6 b0 O
  200.   if(fp)
    + v$ N; D8 E; @! G) K; t$ C+ K2 @: {
  201.   {' Z( v# D1 f9 M/ E! y
  202.     fclose(fp);
    1 j4 K/ c& M$ D8 B, G: O
  203.   }& E; i+ c1 U% ^- d4 \
  204.   return TRUE;
    ) ?* X) S! x4 E! t
  205. }: L8 o0 B" u! `

  206. 3 ^, V0 ?( c1 w: R
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . ]6 F7 X  t2 i5 B6 f
  208. {, u9 W+ B4 V# |7 g) l
  209.   char filename[MAX_PATH];
    3 c/ H8 Q3 C. @. x5 f" F4 F
  210.   LPUPDATEFILE file,olds;
    " [0 X3 x( v7 a
  211.   std::map<int,CString>::iterator i;: U2 D! C9 H2 y7 a" a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! `: u/ G9 S- r* ]
  213.   std::list<CString>::iterator l;
    7 C& c$ l7 r* [# U
  214. ! p" `5 @! \# z2 j- U: d. d
  215.   if(bFirstUpdate)
    2 T7 L& W8 Y: }; j0 H% R- D
  216.   {- x* Z# w* a. n9 N* f8 x' T: S
  217.     dwCurrFile=0;" [! Q3 w. T$ z1 a% f- V/ m; D
  218.     bFirstUpdate=FALSE;
    6 f' N) [6 i5 U# Y0 c- I* ]6 w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & \9 k+ A5 s+ n% F5 Q8 C
  220.     {; e* V9 \6 ], q2 d! K1 o
  221.       dwTotalFiles=UpdateLocal.size();
    & |; x0 M9 e- X3 Y" [7 o3 f
  222.       dwDownLoaded=0;( i9 w7 c% t1 D3 i% w2 c
  223.       bSilentStep=FALSE;  g1 @, M. d/ C  X* _
  224.       bCompressed=TRUE;
    ) _8 |) y' |* \/ T5 i$ L1 q
  225.       strExtLocal.Empty();+ {. ^" H. j6 u
  226.       strFullName=(*i).second;
    " i' @, y. R! ^
  227.       dwProgramState=AP_CONNECT;
    ' j& i2 N7 u5 H; W+ B
  228.       return TRUE;
    8 \4 g! c5 L1 Y3 M1 L
  229.     }
    , q! A: F) l) f! c3 n. q" z' \
  230.   }
    6 E4 t# Z! \$ S- Z# c, f$ Q" b4 X
  231.   else if(bRestartUpdater==FALSE)! a- d: ?* _; n4 c& L
  232.   {6 M5 j3 t( T0 l, o2 \$ d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    / u0 c$ S3 u$ d! b* p
  234.     {8 S1 K0 i4 _+ {/ v  ]
  235.       file=(*p).second;" Q0 f, a8 @! X( `
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' |; j; |  a5 ~8 H! p% C+ J
  237.       {
    , C& V5 E7 o! Z5 U
  238.         olds=(*p).second;* C+ |6 U! ^; T& P6 x+ M
  239.         olds->vers=file->vers;
    % c8 @  w% e$ J( [$ C( R
  240.       }9 {! }9 C5 h- G$ x* V( P" g1 _# @0 R4 L
  241.       else5 D2 m/ L6 h. G$ e/ R
  242.       {
    , Q7 E- F& c; ?: S+ z$ ^7 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& O2 R* _% {* n* L8 W1 ]5 y, y! d1 {& Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & y; L: s) {' B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! Q: {8 ?2 }6 O+ j( U$ i7 z! e) [
  246.       }; {/ ^. A  g* Y; w3 M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : R1 q& l' B  M) W6 A2 @
  248.       sprintf(filename,"(%s)",file->file);' j; j% x/ V9 K) A) s1 e+ c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' B/ m& c/ s" D: p! c) H
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    8 Z4 B  [0 [- w9 n/ K
  251.     }1 v" G3 A: @" L7 c
  252.     dwCurrFile++;
    6 K% q0 w* o4 C8 }8 \4 [; n. G: _
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) M* w3 x9 G6 f9 d; h$ q' |
  254.     {* \4 q6 Q  E" U5 C" w
  255.       bSilentStep=FALSE;9 S: k3 c) @' D( K4 w
  256.       bCompressed=TRUE;; O" M6 T. Q% P1 [+ C7 Q* ~
  257.       strExtLocal.Empty();% n/ Y  o. L5 A* _# y
  258.       strFullName=(*i).second;+ _% `# ~! n: U* B+ r9 x% ^/ C
  259.       dwProgramState=AP_CONNECT;
    - Y2 n# R& ]* {" J' }! e( @$ Q) H4 `
  260.       return TRUE;
    0 R4 l+ }  U1 X" W2 R; S9 _* d
  261.     }& u1 ~, ]" L; ^8 h9 x2 t) w
  262.     if(!bRestartUpdater)
    " ]% _3 g: N2 P0 N. n5 m% F
  263.     {
    4 G& P* Z# U% \% {" @' d
  264.       int iCurrSize,iFileSize;/ t. T- {6 e5 ~4 F/ _
  265.       iCurrSize=0;: s  `* f% R1 D! O. @! c
  266.       iFileSize=UpdateList2.size();- o- `$ D$ C5 h1 k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ k& j0 R* Z( Z" o& A4 k
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * F  T) F5 b# Q/ e" ^" T7 E- G5 t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. U. i$ {7 i0 q, v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ M4 \' a( i, M4 X: O
  271.       Fclearf(".\\update.dat");
    . A! }& b, D4 s
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * Z3 t1 y: V  P! `5 [. B: Q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( L9 R0 B# v0 y) `
  274.       {5 \6 B7 k7 |  d2 \; v2 S: {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 o3 z2 X7 l, J4 Z. x* _
  276.         {" [9 q9 L" f1 j' s
  277.           file=(*p).second;; X+ N* [' g/ w, d% p; ^
  278.           sprintf(filename,"(%s)",file->file);1 Q" D! Q4 M# w/ R  F4 W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  L/ O  K( G+ s- V4 N$ f  J
  280.           iCurrSize++;
      \6 n+ D4 [2 h* t/ C1 _: g
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 P" D7 p! `' \7 Y
  282.         }5 @- m/ C! i6 @3 j/ a4 H, A
  283.       }
    7 k& E" _7 ^! n3 B& @& v
  284.       unlink(".\\update.txt");
    & t) l- J+ w8 M6 {$ u8 @
  285.       unlink(".\\update.tmp");
    4 m" n  f' J) a  `/ y) _8 Q2 y4 n' d
  286.       Fclearf(".\\checkversion.dat");, ^+ |5 `9 Y% l" l$ y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' `  q: [% q* C
  288.       if(UpdateLocal.size())" @+ C' L, n! Y
  289.       {
    3 z7 O( L; r! J
  290.         UpdateLocal.clear();' i$ h& Q$ a% W6 p4 u
  291.       }
    ( S; n. |! T5 l  K
  292.       if(UpdateFile3.size())- |. z$ V3 n; ]% D0 d& D+ F
  293.       {. e+ k' r3 j1 C, J& `$ L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! p6 \& u7 \6 J& P+ R
  295.         {6 y9 C& r$ B, ?' x; Z. a8 a. ^
  296.           file=(*p).second;2 ~" u( n9 z% L+ t
  297.           free(file);
    ) D# ~! q0 t% E0 g$ S9 U( c
  298.         }
    ! A$ o& A  N$ G
  299.         UpdateFile3.clear();. B* @# t) J! O: O9 z7 E+ w# ~
  300.         UpdateList3.clear();
    8 m. S( e% I9 H8 X" U# f1 Z
  301.       }
    7 F- p3 d$ P4 T  Y3 G" h
  302.       if(UpdateFile2.size()), [5 \, E8 ]% s0 }6 L# _
  303.       {% P/ w1 l, ^% G4 Z' ~: ]
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & X6 [6 T" w0 N$ J0 A! p- @
  305.         {7 ?. B0 @0 p0 \5 m6 H
  306.           file=(*p).second;
    $ d7 \' A- K  {8 u0 n% W2 w$ B8 T
  307.           free(file);8 x8 m  n6 \/ H  t9 D
  308.         }
    9 n$ O1 {& ?( Y; Y
  309.         UpdateFile2.clear();
    6 D7 z( h8 h9 ~2 K3 m" Y7 l
  310.         UpdateList2.clear();
    , N! d! T( V2 m) I8 M& }8 G
  311.       }
      H: ]$ _% t; I  u7 N3 r
  312.       if(UpdateFile1.size())
    ' ^) B+ p# G1 p6 ~
  313.       {3 U+ I, N0 ]  o( P) n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( t+ M2 t& N, ]- W5 e; b
  315.         {" \2 G( e9 r& Z5 [2 J3 ^& N; o
  316.           file=(*p).second;: P0 t5 @* K3 K6 H& X
  317.           free(file);
    . D8 p% {8 b, w
  318.         }
    : j' b7 J( ?! ^' l# i1 Y5 R2 e! O
  319.         UpdateFile1.clear();* ]- }; N+ d+ j% t' G2 Y
  320.         UpdateList1.clear();
    5 l2 |* A7 \. U* A: R& c
  321.       }
    3 D2 {  m% J7 @, ~3 M
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; C% n# Z8 f+ l5 T6 ]. E. |6 Y9 ?
  323.     }8 z& y6 S, {$ G. `+ K+ W; P
  324.   }
    7 I/ G2 ^* F, ?+ z) [
  325.   return FALSE;/ ]1 @) R' ^/ K% s) x& V
  326. }1 F+ H# `. L/ o) H
  327. + v5 f) R* P6 Q6 [* C8 j8 v" B8 g
  328. void CRevAppApp::ClearAll(void)2 X' t: J0 c( F  _1 v
  329. {
    2 B' `& Y& n$ P+ q* v
  330.   LPUPDATEFILE file;. c1 h' D: `$ M" [9 w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# d- i* g. Y5 g( b, d3 {- _: W7 h

  332. 5 u$ }) m$ d( Y7 k! U9 _  V* L
  333.   if(UpdateLocal.size())1 L( A% R) [$ O2 o) k: F# A
  334.   {
    " @. y! t6 x9 s5 K
  335.     UpdateLocal.clear();% n! f# q, @' f0 t% p
  336.   }
    " L( W! `- Z# g7 }8 f
  337.   if(UpdateFile3.size())
    % X, x8 m) l3 G. u2 B% d& O: ?
  338.   {
    - E3 x$ F4 ?- j% C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % e7 L/ d. {% E# N
  340.     {' h& M' U$ U. z- A& `$ ]/ e; e# t
  341.       file=(*p).second;
    ; H# O+ f- X- t, r" H; |
  342.       free(file);; T% j* [- X" d; D* X& q; _
  343.     }
    $ o2 r4 d' W2 D3 r9 R0 R1 |- a
  344.     UpdateFile3.clear();
    % ?& j3 e: F& l2 a" S& e
  345.     UpdateList3.clear();, r# I8 z5 S3 N! H/ r  R( D3 D
  346.   }
      c. O, S. B! _3 v" e, e
  347.   if(UpdateFile2.size())% ]) y: Q  Q- Z3 p2 L& h; D3 P
  348.   {/ b* \8 ^' ?( S4 Z  G  V0 A
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * v% ]) M4 l4 x+ |
  350.     {
      P: S# S$ ]+ ]0 k3 J
  351.       file=(*p).second;( F/ c2 g6 v" r5 i
  352.       free(file);  j( Z! f% L, R+ P9 V
  353.     }& _) r4 k: Z: T  Z# W
  354.     UpdateFile2.clear();
    1 K' |/ J& k0 ~% ^+ }
  355.     UpdateList2.clear();
    ' @7 z  q- A! H+ M. e% U: I: V2 p
  356.   }  h8 K( R9 S- @
  357.   if(UpdateFile1.size())) A: g* E% m0 Y; d1 y% P
  358.   {
    ! @1 G- A) j- E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 H9 r/ K! E: r2 P: E
  360.     {
    5 d# E- F- ]! e" j3 I& r
  361.       file=(*p).second;
    $ l7 o7 d2 F* J, h$ Z
  362.       free(file);
    3 R; h% H9 B, n3 g6 f
  363.     }
    : V) b! ~6 k( V" D: e/ N' V3 b. k
  364.     UpdateFile1.clear();/ l) _1 i6 c5 m1 Y
  365.     UpdateList1.clear();
    % a. y' V. E& p6 a
  366.   }
    . J- _8 d! x# F3 g5 X+ @
  367. }  ! }6 G( c7 c- j9 I# j. |% V
  368.   
    . `6 _# v  r( G0 l/ u9 T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' X3 \, f. C9 ~
  370. {
    # f) {' T. A& ^, r
  371.   int c;
    ; f; e- C6 j% X6 O* }
  372.   LPUPDATEFILE file1,file2;
    ) @! s5 i0 t; I$ T1 p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( i7 U) F& ?1 O2 ~9 e6 L
  374.   std::list<CString>::iterator l;
    5 |. l; R5 Y, [" J' ~: U

  375. * M+ X+ @, c& e: B
  376.   UpdateLocal.clear();
      F9 r# H5 E. ~# s4 G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& z' M% P% t  E: f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; i3 Y" q% V9 M7 q- |0 b' j1 Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);4 S5 ~8 G3 w& }' W0 ^4 G. J- _
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* O1 N9 }3 y* N4 d! m; a3 O. V6 t
  381.   if(UpdateFile3.size())
    # M7 I  v- [/ s8 a; [7 d) y
  382.   {
    / k( m( s# }! y: N; R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " \2 D/ E( G( G9 I+ u; W/ u' ?
  384.     {
    # h: E8 ~/ }4 R$ I: P! w
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 ?. G3 n. G- g+ ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 _8 c  i* i4 x9 o  d- _. k" `+ f& ?
  387.       {2 j% S( q6 E% h$ u1 R# n
  388.         file1=(LPUPDATEFILE)(*p).second;
    % D9 u  F/ P3 W3 B+ b4 L
  389.         file1->vers=file2->vers;
    & G5 {+ _/ t% I# R  Q7 h3 M5 O
  390.       }
    3 [/ H) ~" D# O+ ^  B/ h
  391.       else  L; F" w' X2 E) B0 o
  392.       {. |: x- O$ o# R% t; e0 T" A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 S1 c  {- q+ q! F( g0 c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 g1 O& ]0 W0 r" q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- P8 S3 _4 }/ `3 V; K
  396.       }0 k. j8 Q3 x) n. W
  397.     }
    9 e# S$ x2 R# t
  398.   }
    # @$ ^0 g0 f7 v* q  f
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- B1 Y& j2 L9 D' ?6 w
  400.   {6 K+ j0 I$ S( h$ s0 m2 `& k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 o+ B4 b: W/ `8 Z3 a0 r' @
  402.     {2 h4 H. ?0 d2 A4 k* X
  403.       file2=(LPUPDATEFILE)(*i).second;9 y" x6 w5 f" h: W' w1 |
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! {# K$ |- p8 W. o
  405.       {& W9 {  J& B0 d( J! M" `1 P
  406.         file1=(LPUPDATEFILE)(*p).second;& ^1 c  U8 a4 z( I5 j9 m
  407.         if(file1->vers!=file2->vers)& Q0 I5 P+ E. u3 f/ M. P- k( E5 A
  408.         {& {7 D* }" |+ b7 G, D  R# m. A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 S+ `+ A1 q$ n' |' @- e
  410.           c++;  y# G3 L) C0 d0 C" V- R4 O4 b3 @
  411.         }
    7 @7 F+ |2 m1 l8 h/ p
  412.       }5 L6 v8 Y, t% G6 a
  413.       else
    , i' {( ^5 a7 E
  414.       {
    * u! A# U2 E5 w$ T
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & t1 v+ a) [8 @8 ]; Y
  416.         c++;0 E6 f, I  h3 ^% o! f
  417.       }
    5 Q* @3 n7 |. c9 s' U& z9 e
  418.     }
    4 P( i. c& g0 r$ k8 v' M6 [
  419.   }
    , h. B+ Q$ I8 ]" X3 ?; l
  420.   unlink(".\\DownLoad\\update.txt");
    ! J* k9 o! U& o; F
  421.   if(UpdateLocal.size()) return TRUE;
    . _! k; N/ I5 ~/ R! |5 @
  422.   else                   return FALSE;( ]3 I, \7 ]0 J% D/ r: }
  423. }
    - i& y* w  g9 n& I' d' J

  424. ) N/ [) C* G0 B! b
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ M  I+ L4 e% v: h5 A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"; D: C" M2 ?* O/ f) ?: i

  427. . e4 W5 O; O! }  `

  428. " q! a' l6 u1 u! P& `
  429. 2 u9 Z! j, @  u/ r; c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 C: L( T2 L% l8 b2 Y( |3 f$ \
  431. {
    8 E- Q9 o! U# ~3 Y/ l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 e9 K: [- j' F# I+ r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# U2 c' E9 g, j; r% ]6 q7 f" b
  434.   {
    : L- Q9 O3 U: t! D9 `, u3 |
  435.     char szLanguage[50];5 p! ?8 }! t5 j2 |  T+ l/ @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 K& v' H$ v3 A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 t% b5 B* Z+ i8 X0 w% B
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 _7 Q; K/ w5 f0 w
  439.     else                                   m_iLanguage=ENGLISH;  a- G" Y( \0 }% i. ^7 p) X! D) a
  440.     char szRegister[100];6 l7 a4 z3 s( p+ k
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" p" H/ h# I4 l* H5 ]
  442.     strRegsName=szRegister;3 p( {! `" z5 j  F9 C2 Q
  443.     char szPatchURL[100];
    0 H' E; H6 I6 u
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 E, O8 _& M# q% t7 l5 L7 U: W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " R: k8 K, Q  @& j$ Q4 n1 R
  446.   }
    % @5 G/ X  e0 ?! b
  447.   else
    ! K# h: L3 X: J1 K% }) j8 M8 D/ I
  448.   {
    ! ?0 I2 d) n7 g# `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * c3 q2 k/ R& N7 v0 K0 N1 E$ o
  450.     strRegsName=DEFAULT_REG_URL;- C' ?5 F. l6 w) `
  451.   }' |8 C: Z% Y/ j- Z" f4 m. E3 f
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 C! U8 u3 b% u* r- R
  453.   {$ }, u6 v# u" z2 b" j
  454.     char szIP[50];
    ) F3 A- G! R3 C2 M0 [
  455.     char szDIR[300];
    2 P5 C; x& ~, z' ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): e- A; \* v( W  d4 l8 G+ f9 T
  457.     {
    + ^' K- A- z, ~; P+ \; W' ]/ \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 p& k5 i( E- @& h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 X' ], p8 _1 e1 [* P! O
  460.       strHostName=szIP;
    9 v% Z! F& u8 x8 l% ^6 x6 C" t
  461.       strHostPath.Format("/%s",szDIR);
    % _# S/ K. r1 N( m9 ^2 h
  462.     }# u; a0 z, i- d
  463.     else0 b2 I7 j/ x# b: }- A0 U
  464.     {4 n& Q9 r" D% k; f2 |1 ]/ s
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 [1 _, f  f2 G8 E
  466.       {
      o& x& n/ a, f; L+ T6 [
  467.         char szLanguage[50];
    / `% J, M# }- ~/ I6 ^! m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! a# _; Y5 F" e/ x9 Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) a7 f, h$ W' r1 U" s/ w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      k0 {2 g7 ^- v4 t9 `! z
  471.         else                                   m_iLanguage=ENGLISH;
    7 V! z3 c# t/ L
  472.         char szRegister[100];* E  Z5 y% r. _) q0 @
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 z2 \$ T1 g5 j3 F- {6 O0 z* c; o
  474.         strRegsName=szRegister;
    - |" U' C3 h% f9 W0 Y
  475.         char szPatchURL[100];# q2 o& Z! P% N+ c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: D# ^5 u. s3 R! U3 w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( W* j4 @* D, M( s  o4 L9 X
  478.       }
    4 Y+ ]. y/ r& C2 M! ~+ q$ T7 M$ j
  479.       else4 W7 @. v1 b5 J9 f! n' M% `
  480.       {, G. w3 z5 y, S" R
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : ?+ w3 v  i8 v3 Q8 _; V
  482.         strRegsName=DEFAULT_REG_URL;
    4 [$ C6 V+ b  K3 X
  483.       }) G3 o7 `( I# N: K; ^' U
  484.     }- K3 |* W! P3 l7 X5 s
  485.   }0 g! N9 Z* C& K7 W7 A- N
  486.   return true;
    4 I+ D5 w- G- _! v! {
  487. }
    / m, z) }$ O" X

  488. 6 [% i7 Z/ u: `/ z8 \
  489. #include ".\ZLib\unzip.h"+ J) w6 [; R* q, \6 G9 y, N- r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    5 g/ M7 L: r3 _& A4 x# D5 z
  491. /////////////////////////////////////////////////////////////////////////////$ f& s$ s  t% m# W' d
  492. // CRevAppApp initialization
    : X& D3 T  @: {0 E# u
  493. 2 U2 \; E9 ?% Y+ N
  494. BOOL CRevAppApp::InitInstance()
    - ]  K* q3 Z1 D" C1 E& q5 h* X
  495. {# v2 b: Y5 o" S! g0 d$ Y- E6 O. q6 N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: L  ~/ v) w* n1 K; F" c; M4 x/ T3 H: ~
  497. / b; U3 q2 u7 x& u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& \3 m. q7 X1 i" i5 V& ^9 H! j) J
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / L! n3 U0 O$ ]& T
  500.   {# w+ W" L5 T& {4 Q4 Z2 `8 w2 d: I$ U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* D& x3 \) b1 [
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! Y8 J1 }5 t; f7 V; y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 M) A9 w0 X& N8 `  q% Y: e0 B2 T0 E+ k
  504.     {8 |$ y; B' ?$ e  ?2 F8 M9 b8 o
  505.       strcpy(szPath,szPathTarget);
    & B6 n% |. @& {# X2 t* [
  506.       SetCurrentDirectory(szPath);4 s$ j4 ]6 `+ G: o% ]* t4 K: j" [
  507.     }
    3 }5 M' ^0 k  m2 _' [4 j" P6 I& D
  508.   }1 \5 a2 H, k: Q! _* X
  509. #ifdef _DEBUG5 c& t8 k( {$ N* x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + T7 W9 q7 [( v: q* {+ H
  511. #else2 F# s. q6 T1 Z5 W0 C6 ~! t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  s4 ~1 @( N6 F4 R. Q5 ~, N" w
  513. #endif3 W) M3 _, U3 N' V. y0 ?( K
  514.   {
    : |( x7 m: w, q8 R! T) C
  515.     char tempFileName[MAX_PATH];
    ( G* U! a" a% K, z$ ~2 W
  516.     strcpy(tempFileName,szPathSource);  D9 o0 \$ D, m& C, F' ?
  517.     tempFileName[strlen(szPathSource)-12]=0;! G; D9 r  s$ \3 v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( t8 n4 Z6 f2 B, ?4 B. h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; Q" c" x* G+ R0 E& M. Z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
      X& W8 k" \. ^9 {% G
  521.     return TRUE;5 _% M: S2 ]* p4 `( g
  522.   }
    ! O5 G$ N# p7 W
  523.   // Nuke 0118: Delete run.exe
    : M0 t0 H! C3 I2 ]( n+ l4 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" i7 R% D7 T" d9 _- ~# U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ L8 [/ @! V2 K! \/ [" R
  526.   if(!ReadCfgFile("Config.ini"))$ L. G& R3 e( k1 D; S8 o: }
  527.   {4 l& x7 J$ e  h2 D4 @0 X$ a9 ?
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    * D3 ?* Z% D1 }$ j
  529.     return TRUE;
    2 c+ R0 w; h, v. S8 h
  530.   }' B3 p: `" s  s7 \$ _
  531.   HANDLE mutex;% c$ G# L7 T9 @: `3 c5 Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ C" q) P9 T8 b8 G$ b( Z2 H( x
  533.   {
      ~; [' d0 O1 j: c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 M# O; V5 R; ?# J0 L1 A) q
  535.     {; d% c2 U3 k; @7 s
  536.       CloseHandle(mutex);/ n) v4 A& h% h, i4 B- \- T  C
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, I: @0 `& ~* ]5 B
  538.       return TRUE;
    : w5 Y' `! C! K2 [% C6 V: e# A1 W
  539.     }
    8 O- c! @3 q& D6 t9 d
  540.   }  
    + J7 S3 Q7 x8 w0 F/ \
  541.   CloseHandle(mutex);
    3 C7 \- L& k3 }2 ^8 e  K

  542. ' s: |- V( `. d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 B# I7 {5 @! I0 M. N" f2 ^
  544. ; T) Q2 Y/ n! U6 I' H6 a
  545.         AfxEnableControlContainer();
    - @$ S- B9 {9 `4 k5 u( T7 p
  546. 9 c& {2 s0 l: r7 F% i
  547.   bCanUpdate=FALSE;7 Z# ]3 x9 f7 E" X- `1 Z4 w0 e; |
  548.   dwStartUpSteps=1;2 T2 |8 ]% d) s* V+ D0 n8 \6 j5 Q
  549.   dwProgramState=AP_NOTHING;- b+ ~9 b% i. T" |0 C
  550. 7 V) E2 a& d! {+ G4 i" s
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 j" l6 E+ X5 Q3 X8 k

  552. + }4 O  Q$ y) F. d
  553.         // Standard initialization
    : N, @& B  n+ Z5 L/ {0 R
  554.         // If you are not using these features and wish to reduce the size
    : i- }: j# k( j5 t& F
  555.         //  of your final executable, you should remove from the following
    ; L9 `! J4 o0 Y4 s
  556.         //  the specific initialization routines you do not need.+ s2 L2 m' G, v' L! L5 J

  557.   Z  ^7 k, T- L- v% \# y
  558. #ifdef _AFXDLL
    $ Q  q" i* `# r" A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 {5 w7 u4 v: B7 X4 j. X9 E' M
  560. #else/ ~) R6 r7 N# L+ J; {
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically7 Q( X) M# J, J# e, w2 f( I
  562. #endif
    ! ]) ~7 e# Q. k2 b
  563. $ c8 S! H+ l; v
  564.   dlg=new CRevAppDlg;
    0 ^5 z+ X4 b& C$ n
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 t* \+ v% L' A! J6 b  W
  566.   dlg->ShowWindow(SW_SHOWNORMAL);: N2 k) a( d9 V! c5 _0 e
  567.   m_pMainWnd=dlg;2 C" L$ b4 u& G
  568. % q4 Q. l" K7 S! s: ?7 y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 x; n" e6 C% u) ?, n

  570. " I/ s3 r) H* x8 \" V
  571. //  GdiplusStartupInput gdiplusStartupInput;
      N" D" j8 |1 J3 w
  572. //  ULONG_PTR gdiplusToken;" e8 M: i  F6 \! u* A4 ?1 |* B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* X" W( I: j* `. K+ D  c
  574. ) t2 u# V4 y, P: U$ C+ i# O& W9 E
  575. //        CRevAppDlg dlg;+ S: T( O7 }3 G) L$ d$ Y
  576. //        int nResponse = dlg.DoModal();; a2 z; |; R2 [! X: e
  577. //        if (nResponse == IDOK)2 F, c. g' {. M& H/ I- o' G
  578. //        {& Y. f) R& o9 [# o" |4 b7 N
  579. //                // TODO: Place code here to handle when the dialog is2 k  f. y1 A" P5 k: E
  580. //                //  dismissed with OK
    5 ?2 p9 I8 A5 y: n+ q$ }" d4 J- @
  581. //        }
    5 q+ k+ e' Z( Z
  582. //        else if (nResponse == IDCANCEL)
    - Z3 X- G6 |# {; s
  583. //        {
    8 J" \2 v. N# Q' G/ |: C! e: Y
  584. //                // TODO: Place code here to handle when the dialog is; z( {4 A- P/ D( q+ K/ q7 p
  585. //                //  dismissed with Cancel# c1 A3 \3 Q* O% Z& I* _
  586. //        }5 z  ~1 T; R/ U
  587. " v  I' \+ _7 ^  N# b" c
  588.         // Since the dialog has been closed, return FALSE so that we exit the) A' K$ b. T8 y2 h# g1 N4 s
  589.         //  application, rather than start the application's message pump.
    ( O/ }7 t2 E. {6 q; y
  590.         return TRUE;
    " }* L" t" N! m2 y+ s; [! u
  591. }- g8 F% N* E  I7 c! G, H+ F3 J

  592. 0 V5 {. U8 |/ z9 G5 }7 Y$ A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! {, g6 q7 E6 G) a+ b, _" q
  594. {
    7 M/ o$ f3 [0 e) K0 S. u9 e: k
  595.   int i;+ G" h, R# d1 ~$ N  o
  596.   char *szRet;) J" l3 h& J9 u$ g
  597. * D4 i8 k' f+ p/ Y8 `
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 p; J7 D2 [; n4 D% ^* [
  599.   if(sztoken), @# r) p! a8 t8 m- D1 l
  600.   {9 i+ K( A% i9 v( s  b4 K+ n$ \- m
  601.     szRet=&sztoken[itoken];
    , C7 ?  D/ o% X
  602.     while(sztoken[itoken])! u5 b! \" y1 ^/ a' y' X: h
  603.     {
    $ _( u8 C3 y# B8 O4 l/ r( l
  604.       for(i=0;i<(int)strlen(token);i++)7 T/ a/ @& Y5 V- h( y9 {/ b1 D
  605.       {
    , d* c. _7 T* h: O# m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 j4 c7 t2 C; M" N- ?6 A! W5 _
  607.         {
    8 J/ ~# m) @5 f0 X% I, }5 ]6 @2 j
  608.           sztoken[itoken++]=0;% R1 B4 j* Z. ?2 y/ y# ~, f3 r5 A
  609.           sztoken[itoken++]=0;4 J6 S2 s/ i( z
  610.           return szRet;/ D; G- L# A/ S$ G/ }4 p0 S3 Y
  611.         }3 f, p6 k( @: P1 c, [  j% g
  612.       }- V+ g4 m) U/ ^; P  b0 s
  613.       itoken++;0 ^8 j$ q$ f) q$ D) |
  614.     }
    : ?* o  a) Q9 p/ e* b! Y
  615.   }
    ! m) z! N0 L& u( H
  616.   return NULL;
    , u. _: ?8 v7 R7 X
  617. }
    ' J. `2 J$ _$ w7 R) b

  618. 4 h0 c4 W3 q) s% p" ]
  619. void ProcessProc(long Total,long Current)
    9 D1 q: o- o; @6 i3 o% x9 k
  620. {9 A; Q8 J: C% L, x8 A8 ^
  621.         MSG msg;! S. I9 I! k' Q9 v8 }; [2 k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    1 W+ M  j( c* i: I/ T6 F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + G+ _2 q/ C/ E: u3 _, S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - i7 d# `- J( l, g3 b& I. @  q4 b
  625.         {! z4 Z9 F5 D" w% C+ n/ l, s7 V
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / u6 k% }7 P5 j5 p/ y2 G% t4 l' y
  627.                 {
    ) G$ ?5 s/ f' r6 d$ C
  628.                         return;
    4 Y. L4 f" E1 O& O) x
  629.                 }8 r2 x, w& g' x6 d$ \
  630.                 TranslateMessage(&msg);
    ! R' u1 [) i# l0 A( x; ?
  631.                 DispatchMessage(&msg);  X0 Q5 E* q; Q2 J+ r
  632.         }       
    & V! v' S7 |4 K+ k; Q# u
  633. }
    6 c/ \2 f) G) u- U7 G. t- r6 z

  634. . B8 g- o& l  T; @
  635. BOOL bFirstChar=TRUE;1 j* x4 T7 j8 d' u0 c4 O

  636. + a5 |9 x, M/ C: s  M
  637. BOOL CRevAppApp::OnIdle(LONG lCount). Q2 T8 X# `6 f
  638. {
      c; n$ |% F7 e8 r9 F- O
  639.         // TODO: Add your specialized code here and/or call the base class
    " O' o/ X% B/ m6 x8 y+ E2 ?" i
  640.   switch(dwProgramState)6 K3 K: M/ E  D4 O9 p6 u8 }* c
  641.   {% U! ], Q/ B' T& o) r1 T2 k
  642.   case AP_NOTHING:
    2 C6 W, n2 u* o' u" Z2 t/ ]" I
  643.     switch(dwStartUpSteps)
    7 Z0 w8 R0 y9 z
  644.     {6 c: a. k* H# l# h4 ?& B! N
  645.     case 1:
    0 f- [' ?2 g. j2 M* @( U' Y1 b  y' S
  646.       {% P0 ?  s, j" z- g
  647.         int i;
    8 k" W1 @* I6 }+ E* `
  648.         CDC *pCDC=dlg->GetDC();
      C, P3 `1 W" M/ e" f
  649.         HDC hdcwnd=pCDC->m_hDC;& m% j7 {" H# y( Z3 }
  650. //        Graphics graphics(hdcwnd);
    " g/ k2 }- @# L0 G6 a3 b. B
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! p0 V6 E6 n- W% _, {% }) Y$ z1 J
  652. //        INT iWidth=bitmap.GetWidth();# V, H! _9 Z8 P# I: a# ?  G' k4 R3 x# \
  653. //        INT iHeight=bitmap.GetHeight();( _" ?& {! A" m* c& ]% k; n
  654. //        Color color,colorTemp;
    - k, Q' J; A% G0 A/ C+ o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 E2 r# i% ~+ _; l( e! e0 G7 {
  656. //        {
    % `7 M, M5 Z! {. Y: |
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & Z! h7 r, D! J0 l1 ]6 A
  658. //          {
    # ]8 t9 Y% r6 i7 F8 W3 i6 g9 R0 B& m+ \% }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! \3 ]% |; U# G. }2 g  [9 l
  660. //            colorTemp.SetValue(color.MakeARGB(
    : X" s6 n" r$ Q# l. F6 }% z. L
  661. //              (BYTE)(255*iColumn/iWidth),
    0 E+ J. w$ N" s! \
  662. //              color.GetRed(),
    ) j9 \$ S3 a- w9 C  ], F4 Q
  663. //              color.GetGreen(),
    3 P5 S5 c9 T" y, ]/ l
  664. //              color.GetBlue()));6 F4 ~% i, L. n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' B7 n/ a- o! o" e3 Z3 {
  666. //          }4 t! g1 g& P, |# N1 K6 _
  667. //        }- O2 b( T$ X+ m3 |( w4 G$ E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    * \, i" q* G" `+ M9 a" Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 V5 a8 l2 A0 `- X+ Y& ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 {5 H  P+ {  X' g, ]
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, c- |$ t& u" \
  672.         for(i=0;i<240;i+=8)
    ! f& N0 Q  F. X3 S* p; o9 }
  673.         {
    1 e$ W( Y: i$ k
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & z$ Z/ y* y+ A8 d5 |' g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 U- L) Q% B4 T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % K6 W' }! Q; K8 l1 f% H
  677.           Sleep(33);
    5 K$ D. |; R% p1 c$ Z2 m
  678.         }
    ( x1 R+ r2 D6 ]
  679.         Sleep(1000);
    6 i6 T/ X3 |% m
  680.         for(i=240;i>0;i-=8)/ M! Y- t; R* V3 P  y9 Q2 {  n) S
  681.         {
      D+ j( Z: T9 m( P/ t) e* W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) B% m; ]( ~- U& [7 w, s1 ~# l
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 ~, {, R/ Q* o, P1 u1 x+ ?" x+ ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  S8 |2 y5 v3 D
  685.           Sleep(33);
    ; Z9 B2 B' ]# H# D! A
  686.         }
    # u5 w* K8 d1 r: I$ z) ~3 i: Y6 n+ ?5 j
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 B% \2 Q) \( R( g, B# H+ o
  688.         dlg->ReleaseDC(pCDC);
    * o5 x5 A& r" W9 b
  689.         DeleteDC(hdctar);! V5 w+ N- t* F" c. N9 d6 p
  690.         DeleteDC(hdcsrc);
    & d9 N$ q+ ~: k; ^# G; s
  691.         DeleteDC(hdcorg);
    % {9 f4 g, C, |! `; h
  692.       }
    & W7 n* E5 _5 [. J
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' j8 H# G& e; R0 E: J& g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 e0 H# x7 _% ]2 P3 ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" Q3 n& q& ^2 B7 G9 x
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # C7 @8 L1 T% w2 c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 y8 ^4 K& ^- r- S5 X
  698.       if(!Dn.Connected())
    # _8 Q6 E& y5 N, _
  699.       {
    : E: J! S% m% X3 b2 i6 R6 a& d" R
  700.         dwTotalFiles=1;
    ; x: a: T7 I$ h& w$ g  u
  701.         dwDownLoaded=0;8 Y& Y$ W; R$ p4 e1 @( u
  702.         bSilentStep=TRUE;8 o. b* f$ A# v. t$ l# d5 C
  703.         bCompressed=FALSE;
    3 V' \0 W. S  q4 y# m8 A: W7 F9 R
  704.         strExtLocal.Empty();$ p4 b0 Y, ^5 x' j
  705.         strFullName="readme.txt";
    5 b( Y6 w- i1 X1 x! s& [9 m6 c
  706.         dwProgramState=AP_CONNECT;
    ) D  p3 H! P9 i, Z: `" }
  707.       }
    $ J7 m0 P; H- a" `! ?: e4 u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ L6 V' [5 \6 ^! j
  709.       dwStartUpSteps=2;
    . ^% e, U- J  p1 t: b% u/ Q) ~. G2 k
  710.       break;6 T2 d5 Z. w/ j' O! s2 m
  711.     case 2:
    * h) l& t4 n- ^$ i5 L
  712.       {; s* {" R7 o/ _/ j
  713.         int iEOF;
    ) ~& \& N0 [' w1 j& m" j* t' `9 T) J
  714.         FILE *fp;
    " Y0 v, O( ~( `% O3 X- a
  715.         char szString[512];- o! Y8 m% m' ^/ v9 r# a1 y, q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' y, n% o1 v/ N5 `
  717.         if(fp)
    4 |  \  \5 v. q8 X5 `: s
  718.         {
    ) G& S) O# a) Z  [( Y
  719.           do6 u4 ], f3 j" j, D, E( X* ?
  720.           {
    0 M; f. O$ e2 K, W
  721.             iEOF=fscanf(fp,"%s",szString);
    ( Z. W# K- U. d: e9 J
  722.             if(strlen(szString))! N3 E/ j' o9 g- s' G, w" ^% |
  723.             {
    - y& x: {7 w& v6 Y
  724.               if(bFirstChar)& k7 z  w& b4 p4 P7 {; [
  725.               {0 S6 F; P9 m+ ]- o) C
  726.                 bFirstChar=FALSE;
    ( E" }7 E/ Q3 ~
  727.                 bConnectIsBig5=FALSE;; d. O% `9 m; a% [& C2 S
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 V8 H4 ~; B" w$ o
  729.               }3 x$ l6 O/ Y. |
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( V+ J, H8 `9 i5 |. ^% Z/ o% P  {
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ M6 i' ^0 X; t/ [. q9 e0 m
  732.               dlg->m_ListText.AddString(szString);5 x, X4 R' @& _9 n9 C8 E8 R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) a7 x8 U" K$ l9 o; j% f
  734.               *szString=0;
    1 j: B- p8 ]& K$ O3 N% @: n1 L
  735.             }
    - q" R' C' B$ m1 J9 g5 w! P& e8 m3 I
  736.           } while(iEOF!=EOF);
    2 r3 D) ~1 g( ]8 M/ X! a1 e
  737.           fclose(fp);
    % d! }& R4 u1 n2 K4 d
  738.           unlink(".\\DownLoad\\readme.txt");
    / q( x5 K! ^: x+ b+ y
  739.           dwStartUpSteps=3;. L1 e8 O, |# C# d, E
  740.         }
    % z+ M: }: X" l; i5 s. b
  741.       }
      X' R0 F0 N% S
  742.       break;
    . Q6 ~8 i9 C3 C! @7 [3 |. |. }$ M) B
  743.     case 3:, H% u. T4 ?* }( g- t# M
  744.       if(!Dn.Connected())
    7 e5 z9 W* @9 W9 q$ B" O% F" K5 u. l+ `
  745.       {" p7 Y7 ?/ W# \6 @$ ], W" ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" f" b; }5 i- h! c" Y, g$ C
  747.         dwTotalFiles=1;4 Q9 C! K, ~& {
  748.         dwDownLoaded=0;; X1 Y! U' [6 n/ q
  749.         bSilentStep=TRUE;2 \' a$ {) |# R" x( v- P* k
  750.         bCompressed=FALSE;
    8 w" k* P4 m* D8 F( `5 j. o
  751.         strExtLocal.Empty();
    7 [  F% Q6 g0 p1 s8 v; ]  I, q5 d
  752.         strFullName="checkversion.txt";( A4 D2 m* }! h
  753.         dwProgramState=AP_CONNECT;  k: p1 ^, v& F4 y' o. P/ }
  754.       }
    & Q+ @; K7 O% `" Z  L
  755.       dwStartUpSteps=4;* ^/ Y# B( Z; o+ y8 p$ J# V- V6 H! M) X
  756.       break;
    2 z; D, Z& S, i$ P' T
  757.     case 4:( u* Y1 l  ?- I
  758.       {
    5 D- [/ I% ?& i' M! C; D+ u$ a
  759.         FILE *fp;) o7 z" P! b. I6 ]9 ?0 H
  760.         char szString1[128];
    2 U( Z3 Y9 J0 c5 p- l
  761.         char szString2[128];9 p0 H0 B! Y# O( v
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ f9 n+ }$ V4 d; B. l7 C
  763.         if(fp)
    ; S3 B$ N4 A+ ^" p$ s7 C
  764.         {5 ^% B3 e# L; ~- W- f
  765.           fscanf(fp,"%s",szString1);
    # [* A+ b  k* W4 j; x
  766.           fclose(fp);
    * t8 F4 J2 C* \% I+ X* `
  767.           fCheckVersion=atof(szString1);
    ) g' |1 C' n3 s1 q, H' s3 S5 W
  768.           fp=fopen(".\\checkversion.dat","r");
    , G7 G: g( ^  x3 S5 `
  769.           if(fp)
    , K  M( O3 ?9 ]9 Z& r# j
  770.           {9 `+ B& E, e7 z, C6 I% R
  771.             fscanf(fp,"%s",szString2);: q3 T0 `3 b7 ]
  772.             fclose(fp);
    , B8 G1 T! r" _! u. [
  773.             if(atof(szString1)!=atof(szString2))
    3 ~9 j7 N6 I" G! E) o! ]% J" e
  774.             {
    8 c) I& K- t5 X; u& W2 f1 E
  775.               if(!Dn.Connected())- w% n4 B" |' @  d
  776.               {
    ! j! W) V# u2 m0 h. V
  777.                 bFirstUpdate=TRUE;
    2 @7 J9 `0 a9 K
  778.                 dwTotalFiles=1;$ W/ ?) B7 O. a
  779.                 dwDownLoaded=0;
    ) p; a" u& h* m4 g) I3 i' t
  780.                 bSilentStep=FALSE;
    - s2 k1 i8 m' g* w
  781.                 bCompressed=TRUE;% U: e; x( E) s: c' B! a  Y! W+ V
  782.                 strExtLocal=".\\DownLoad\";
    , _; Z( K- v  X, D4 r# L- @
  783.                 strFullName="update.txt";" V+ w% J# b4 J$ A& v+ _* Z
  784.                 dwProgramState=AP_CONNECT;# B, H. r; h# D# U* Y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ B, S6 ]8 M' m9 g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 Q9 l7 z9 \) A5 L* x; T9 Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , B! T5 I5 Q, ^6 r! q. F

  788. 7 y1 `. l$ l1 Y4 _2 J  G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 q$ A7 Z- \1 ?$ K, H8 Y6 a
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . F: ~# R1 ~! @8 g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . Y) s/ z8 \4 z* a9 Q7 Q
  792.                 {
    * ^3 o; N, C% V5 u+ Z# j' U# a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " L) D2 @) r) O: G$ S4 t7 J
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , \6 e# T8 i2 z& K1 ~/ t* P* G
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");" u. A7 E( ]% V7 O0 b2 m3 Q3 h$ K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* y9 {1 W+ E2 @  \) N' A7 ?4 f  [
  797. % o, m' I- N  ]' r- L
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  ~. I$ }/ t: w, i# {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ p: r  Z9 \) f2 ?# E& Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- z- B8 H1 n, @: S3 o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , E9 A$ s$ }, [) k
  802.                 }/ O. F+ a$ ]: d# ]1 e9 e* T
  803.                 dwStartUpSteps=5;
    ) x3 _5 W& i- e5 C* |2 Y
  804.               }
    ; L; e- d6 L* ^! j$ @# f0 s1 T
  805.             }
    - r; \2 m# ]5 \
  806.             else; t( ]2 M8 b( @1 N# ?! k
  807.             {/ r3 r. q" j4 D- `6 {, r
  808.               unlink(".\\DownLoad\\checkversion.txt");0 `, N  h/ s$ e  ^, d
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! Z( W/ ~/ }) B7 L1 g1 Z: ^; `5 G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 T4 A5 Q* E* F9 \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; q  v+ M1 G( r# r
  812. / w% t/ T4 `: [' ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; a, e  ?7 e1 g5 ~- Q
  814.               dwStartUpSteps=99;
      _- \4 y. R& f$ ^/ z' H
  815.               bFinishUpdated=TRUE;; c9 }. I1 G+ I/ o) z4 K
  816.               bCanUpdate=TRUE;
    & E0 l: R" f4 `. i6 M2 N( j
  817.             }% A  ?( W7 E8 e! }, u( k- k2 l$ u: k
  818.           }/ A( l7 k: C) x5 {# p7 O( H
  819.           else
    " }3 D  W3 }" n
  820.           {
      `# b  r3 ]: I' Y
  821.             if(!Dn.Connected())# T  T) W; W: j" D( E; n; l" a
  822.             {
    0 Q( |! I: W! q  s
  823.               bFirstUpdate=TRUE;
    " I' {# h- Y$ T+ P
  824.               dwTotalFiles=1;
    9 c9 P( _) ~% `6 ~; x9 ^& I
  825.               dwDownLoaded=0;
      L1 F- v+ O5 U* J
  826.               bSilentStep=FALSE;
    ' [0 v5 q3 \0 M/ d
  827.               bCompressed=TRUE;
    # L5 D  L  r4 e/ g. D. I
  828.               strExtLocal=".\\DownLoad\";+ M7 ~! d8 e; E  {
  829.               strFullName="update.txt";4 [2 K3 p7 q/ V5 X6 N& w; i2 Q
  830.               dwProgramState=AP_CONNECT;8 w. C1 _; X" Z6 k$ z9 G
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- {, Q0 h  V4 M$ ]! X/ x, @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# J# |' c1 i! H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 N8 E2 j$ T4 }: |) @) P' o
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 \5 e4 B/ c# ]3 S. ]
  835.               unlink(".\\DownLoad\\checkversion.txt");- X- }# u" K' I6 O& x1 R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): B) p8 }* G( ]3 C! a$ \% P- a& Y# m
  837.               {
    9 X/ @8 w$ V7 b% R7 ~
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 j' w% k% T+ e* F
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    " u5 }# B6 A) J; z7 @' i
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 m- P# T6 F1 K8 [& h' y% t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  `! u/ q: a: m6 h
  842.                 8 m2 i/ ^" C3 `  `& K/ @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( P/ S! H7 L2 L& R" y/ Q- q1 d) d2 X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & B$ W' R9 S3 ^
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . p3 g+ _6 ^; g+ ^9 Q% I1 v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* M) t% h( a0 B) D
  847.               }
    . p  A' h" q, A9 L% m: v+ }% \
  848.               dwStartUpSteps=5;6 ?* n5 A2 _- x4 D: ]
  849.             }. C& A$ U" B0 I/ c7 ~8 j
  850.           }
    / ?6 [5 g7 l7 v; x( ?4 @( d6 b' g
  851.         }; R' \- n& u: a  w/ k2 T# `
  852.         else
    ; B" e  \* T7 c" p% @
  853.         {: C' j( p! N& j. V& r( M
  854.           dwStartUpSteps=3;
    2 y% G3 i% `. e- Q4 y
  855.         }
    + Y# [2 ?0 R+ T
  856.       }
    7 y! r( @% S- e6 l2 t
  857.       break;
    , w( T6 q8 u$ a' `6 W" Z; r
  858.     case 5:2 d; X) D& [# ]
  859.       {) G/ M9 W* W- p( K* H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)5 V5 p8 b: s& R( L; @5 W
  861.         {! E1 s* ~( q$ Z
  862.           int opt_overwrite=1;
    0 w5 L' ]' `' t" V1 L9 v
  863.           int opt_do_extract_withoutpath=0;
    * {$ z2 V2 C. e5 K
  864.           unzFile uf=NULL;
    0 D- e( b4 K- ^9 I! ~# W& ?' d
  865. ! l, u- W- d7 x
  866.           uf=unzOpen("Wsa.zip");4 `9 M- D* s1 S- E, B
  867.           if(uf)
    ' a! N# d; ]% H* t6 q# ]
  868.           {6 b; P) B( G7 O2 D9 Y7 \2 G/ b3 ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " I/ R2 x# u) x$ u+ H
  870.             unzClose(uf);
    & Z5 @* w+ L2 D  T$ Z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: ^9 d4 t) |$ s+ T, I+ L# u* H) r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");; K' o$ k) y$ B; F; e4 B3 t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - }3 w: [) J- u- F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . ^. R# e3 M6 q% H( I4 w& {( h, q1 J
  875.           }2 ^3 ^; f% g+ G: n2 h* {
  876.           DeleteFile("Wsa.zip" );
    6 @. E+ P( V$ ~, G
  877.         }5 x. m, D2 R5 O8 ]/ O

  878. $ {+ N1 U" z3 _/ U4 f5 [7 w0 ?
  879.         if(CheckLocalVersion())& t$ D& L) S5 n- g
  880.         {
    0 J/ H2 }# r) S. T( o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & ]& `: @6 Q! f1 m$ `+ k3 l
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    # W8 a/ A7 Y, ?2 s6 y. g7 b
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");1 i7 N6 P& ^/ G% d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 ^# k9 F6 b. i6 h: h
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    8 _$ ^0 a9 V+ r0 [, n; S8 `: s
  886.           dwStartUpSteps=99;
    5 T! J, `, B6 e1 O& u
  887.         }4 \  U: p* h; L7 g3 E# M# n8 b( v
  888.         else
    3 R  T5 U4 w  l* c9 s% U5 V
  889.         {
    % k, d9 s) c- g
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 y$ M, w- R1 V6 S7 ?$ |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ K# O: O. v) L5 n* `: o" ?. J, G8 d/ }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% g  \  t3 {  i

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

評分

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