找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 D# y7 `2 @; ^/ b- A# h
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 d, y: ^8 @; Z( d4 m- G# `5 }
  2. //- x0 X1 {0 ^% Q2 n1 G* I

  3. 4 X7 C. _, s% Q7 h* a. p0 j
  4. #include "stdafx.h"
    : S4 T* P  x* ~0 ~& t3 h* R

  5. " b* E8 A, F4 t4 }8 R  `
  6. //#define UNICODE. q8 N4 ~8 c; D, w! K0 J
  7. //#include <gdiplus.h>
    / i+ L8 Y9 J. j. \5 f5 t
  8. //using namespace Gdiplus;
      R" s+ U2 s* J* w; u* S
  9. & @% ?' G  D: `: ]8 j- ^) ~
  10. #include "RevApp.h"
    * d1 s: V: Z1 a4 R) U0 C
  11. #include "RevAppDlg.h"$ W" ^. i% R$ y4 y9 H9 L! |! i; }' v( w, z

  12. & y" R: F4 j+ F& P* |! e
  13. #pragma warning(disable:4786)
    6 U' ~) ]& ~# B5 H# q& Y7 ^4 v
  14. #include <map>
    2 ]2 X8 w% D: }) \: J3 c
  15. #include <list>9 Q& e; S+ s2 D2 F6 c0 \0 `
  16. #include <direct.h>
    & \3 {$ S  e) M8 S. ^0 g
  17. 5 e7 [8 w$ r; E, {
  18. #ifdef _DEBUG+ ]: F5 m& I. _- u3 Q& h; ~
  19. #define new DEBUG_NEW" k3 K' K/ G5 q. ^
  20. #undef THIS_FILE. b- ~0 e8 {+ [0 u; h
  21. static char THIS_FILE[] = __FILE__;
    % h  N2 h: v5 i+ K
  22. #endif$ O. V! K5 m4 s
  23. #include "SkinResDef.h"9 i+ u$ x9 Q1 @9 q
  24. #include "ChangeBG.h"
    , j5 y# t! l$ `% J0 M
  25. #include "AFXINET.H"
    / I# J5 `; e, n& h7 s
  26. ( e. D% V6 i1 Z6 ?6 A
  27. #define TRADITIONAL_CHINESE 0
      l3 {; w7 l. X. Z% a( S( T
  28. #define SIMPLIFY_CHINESE 1
    0 z) A* [; M+ J
  29. #define ENGLISH 2, ?: `9 k2 v! O7 H: X
  30. int m_iLanguage = ENGLISH;: A5 W2 ?( A3 H6 c  @7 e
  31. /////////////////////////////////////////////////////////////////////////////0 x! L( |6 T4 o4 k" d! T; s
  32. // CRevAppApp9 L) b5 @  E/ ]1 R4 Z# Y

  33. 5 B6 d- w5 A$ p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" v/ D1 K0 N. `
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % [+ T# |+ E) `) M, F! G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 b7 z+ ~, w- S- w9 |1 L  ^9 k
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' ?: O- G; ?& j. E
  38.         //}}AFX_MSG* @- |, N7 g' r, @5 q/ }/ {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + y1 Q' {1 [5 h2 U% b$ a% I
  40. END_MESSAGE_MAP()
      T5 M8 p1 G6 L- N9 V9 \/ X
  41. . R( L: h: f. _7 Y1 a  T- U* K
  42. /////////////////////////////////////////////////////////////////////////////) y0 v6 l# x# _, `0 Q  A2 [
  43. // CRevAppApp construction0 P" d( M) K; s9 d' I. y8 L

  44. ; z) l; M3 z. Z
  45. CRevAppApp::CRevAppApp()( {8 [! O  X( p( k
  46. {5 a' X7 n" s4 x5 W
  47.         // TODO: add construction code here,
    4 h# @! X0 S. y: s
  48.         // Place all significant initialization in InitInstance
    9 @1 y7 g2 z6 i8 F5 j' K3 A
  49.   bDisplayIsBig5=FALSE;
    ; t. T( v2 t% X* b4 K
  50.   bRestartUpdater=FALSE;
    5 f9 u" F9 _! i+ c7 L4 F8 d
  51.   bFinishUpdated=FALSE;9 A1 R" J2 T  d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; u9 K8 x0 m6 w: T" H: H, T+ q/ r2 O
  53.   InitChangeDataBig52GBKS();
    3 E) ^( X! h+ g& l9 M6 R
  54.   InitChangeDataGBKS2Big5();2 o* F4 S/ F1 i: F2 ^0 U
  55.         //# N5 W/ t. C5 m" k5 U
  56.         bClickRunExe = FALSE;
    & G2 S- V+ f0 |8 }( ^5 E
  57.         /// j- W- m- u; t
  58. }8 D) f5 ?; ]& j5 ^

  59. 8 S7 H7 M7 H1 v9 c
  60. CRevAppApp::~CRevAppApp()
    $ `! @% M2 R; L1 e/ F) y
  61. {% s( F1 q  z- d( L9 K% Z
  62.         // TODO: add construction code here,2 s! l/ s* \. x4 D% ^# p8 h
  63.         // Place all significant initialization in InitInstance3 [8 I3 V5 o" Z& j: E2 s
  64.   EndChangeData();
    , _( }; I2 R% H. o  `* o) M
  65. }
    ! E% Z2 N. I* f4 Q; N0 N

  66. ( Y3 x9 c( H1 _% s# W
  67. /////////////////////////////////////////////////////////////////////////////
    # C6 S. A: t* V3 l5 [, ^" @2 {
  68. // The one and only CRevAppApp object
    6 s2 E, E6 k7 ^; x7 w3 _0 j

  69. 1 X9 R; k, I' S) @5 N2 e  m
  70. CRevAppApp theApp;
    2 M% O" f3 L9 U
  71. " l/ z" V2 j8 n6 X- A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " P9 Y" ^5 ?) g. |/ Z
  73. {
    1 j1 M; d8 l% Q) Z, R+ F
  74.   int iEOF=0;
    , B6 U! M2 Q0 j
  75.   char szTempName[MAX_PATH];+ A: g0 ~& Q) B' H3 c; r
  76.   *szFileName=0;
    6 Z! g2 F4 y, y; X
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; U9 n5 [; W0 ]* a  m
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), l8 S7 K1 o2 }6 h  t9 h
  79.   {* r8 y# ?7 _# A& n
  80.     strcpy(szFileName,&szTempName[1]);, U+ \- j: m0 R. C. k4 a+ {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 `2 J" i3 K9 Q
  82.     {
    ' C, u; B" K6 V6 j
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + x* K& R2 c6 n9 D
  84.       strcat(szFileName," ");, o7 R- O+ u, E- m0 J% D) F) b
  85.       strcat(szFileName,szTempName);
    7 S3 C$ A8 |' l- w2 K
  86.     }
    0 j- d# N% G( O  E+ T$ X
  87.     if(strlen(szFileName)>=1)5 f% ]- Y3 S/ Z% w
  88.     {
    - r" f- Q; g& ]0 D: L0 @
  89.       szFileName[strlen(szFileName)-1]=0;
    - O) ?; J6 L9 T  ^/ q6 D3 @+ t
  90.     }
    8 R& @; i$ V# |
  91.   }
    & s* F3 I1 K# x. y+ R
  92.   return szFileName;. d, y% s; f$ A0 T3 F
  93. }
    9 @% J8 ]0 N7 M* ~- @: b# x1 y

  94. ! ^5 E+ ]! J- X) O- y6 M+ P; b
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 q( v8 Q$ j  u$ y1 m( U; n
  96. {  `" u/ `8 V9 _$ v
  97.   FILE *fp;; v% o) x! `: i8 R9 j
  98.   char *key=NULL;* ?; K1 m, P# _( V- _3 e+ E
  99.   char version[MAX_PATH];
      p! B( z' ]: J, W/ ]" y0 J( o
  100.   LPUPDATEFILE file,olds;
    ; f# @- g' H7 Z: g4 d* E5 l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" h4 l9 |3 X4 ]1 _" V- r
  102. 8 K3 T3 R0 D2 W3 I% d- Z1 I
  103.   UpdateList.clear();3 D1 c# Q( A" s$ V  W: S2 Z
  104.   UpdateFile.clear();
    ! n" ^7 {7 `0 n# o* k0 k
  105.   if(GetFileAttributes(filename)==-1) return false;
    % W4 n/ P  c1 n
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! h8 E1 ~$ w7 z* _; |
  107.   fscanf(fp,"%s",version);
    5 E% `* S2 w, ]! v! q1 l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    7 g" j; r  ~7 L4 r
  109.   while(fscanf(fp,"%s",version)!=EOF)
      @5 U0 n. [5 [6 o
  110.   {1 b6 m% {$ A; W1 ^4 S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! w5 R4 d# e1 g9 {3 n$ Q" b
  112.     fscanf(fp,"%s",file->path);
    4 [: O9 f4 a( n" B3 D: m% d/ b
  113.     ReadFileNames(fp,file->file);/ A; R7 y3 Q$ k( D. R# L! \$ P
  114.     strcpy(file->full,".");
    % O2 {- H- J; u, P: n
  115.     strcat(file->full,file->path);4 C' I) U/ V& T) P0 I/ Q
  116.     strcat(file->full,file->file);
    $ e9 C( Q) j% O+ p9 H3 u3 F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 m/ I* V' }) l" h9 Y
  118.     {
    ; S/ U2 s% G/ z0 Q+ G7 S5 H
  119.       file->vers=(float)atof(version);" f4 j7 K/ l- H2 r3 `
  120.       UpdateList.push_back(file->full);" t" T( x, c( j5 l- q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# x) t0 J( b  z5 [# X
  122.     }
    + T: C7 U( Z  C4 S
  123.     else
    3 k) n! T+ E- \, J5 h; f
  124.     {
    & {2 E: j% M4 W2 Y, ^, m
  125.       olds=(*p).second;) [: d8 O- R1 z- P" `' ^
  126.       if(olds->vers<(float)atof(version))5 l6 L8 b' d/ a6 N) ^
  127.       {
    0 u& ], }: B! X
  128.         olds->vers=(float)atof(version);( d& ^9 @3 i$ o+ |
  129.       }
    8 P. G7 q( l- h- G
  130.       free(file);0 L+ V" \* b( s0 ?* L% \# p
  131.     }/ u- h+ E. h+ a% `9 C
  132.   }
    ) q9 m5 h) Q3 I
  133.   fclose(fp);
    " |. m$ C3 I' ]( m. A$ h
  134.   return true;. o& Y- k. c$ A: h
  135. }
    , |2 J8 o, Q/ @' w' V4 d6 A3 I
  136. ; h  d5 L. E5 d& s8 v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 W, J% J1 J+ ]
  138. {
    9 w0 p/ y4 O, Y9 p( {
  139.   TCHAR  szFull[MAX_PATH];8 P( o0 d8 s5 z* q, k8 ?
  140.   TCHAR *token,*inter;( [$ O) t7 R# Z. W. _% C4 n
  141.   *szPath=0;
    0 a& b8 h3 d- s0 q
  142.   strcpy(szFull,szFullPath);
    9 v' \/ O( t- |
  143.   token=strtok(szFull,"\\/");3 b0 l* M2 r$ X, e4 T
  144.   inter=token;
    " M" U7 \( E" j
  145.   while(token=strtok(NULL,"\\/"))
    3 r' u$ z/ u0 o- T0 k# x8 j1 G8 R
  146.   {
    ) s& ?  A  Z" v
  147.     strcat(szPath,inter);" j) a) l3 b# H4 ?4 {0 M$ F  `* Z9 T- D
  148.     strcat(szPath,"\");
      [  ~1 B8 [* p5 D, v6 f
  149.     inter=token;  H7 x3 e* m& }
  150.   }; p+ G8 h2 Z7 L2 ?/ ~
  151.   return strlen(szPath);
    . Y# f) x  u% }( T& m8 ]
  152. }3 G6 j$ j7 ^9 m4 H1 J& Z
  153. & H3 d. W0 ~. E5 ]
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) v. l/ q1 h& V, c- C
  155. {
    / F4 Z. i: G. {- J) L! j- x6 b1 `
  156.   DWORD attrib=GetFileAttributes(Target);
    # ~7 {4 {( ]+ f* {) u; Q/ g' I
  157.   if(attrib!=-1)
    + y& A7 j- |# L+ e7 n! E
  158.   {' r! m8 j0 D+ ~8 w5 q# o; T5 N
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& X$ T$ }7 G' A9 x
  160.     {% R8 G, E! v- I0 V
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: y! \/ ]. Z% r9 N/ O- }7 V6 f
  162.       SetFileAttributes(Target,attrib);2 t/ }+ ?" M8 u+ J$ O! o) X, |
  163.     }
    / a. A2 |& c0 y5 v! K- W
  164.   }
    8 r1 `; J* @4 O. c7 ~, o+ h+ J
  165.   CopyFile(Source,Target,Erase);
    " y2 H# d7 S) r) N- n: y8 W' ?
  166. }) Q, ?  Z: F3 a0 d6 B7 e" e

  167. 6 n+ d8 l) D9 i: S/ D
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 x- s0 S/ _' M( W+ P0 Q% X
  169. {
    6 R+ s$ A6 a5 Y
  170.      FILE *fp;+ ]+ @: X" C- \( R
  171.      char  szBuffer[8192];, w: ]; ?+ f9 S0 y6 n& z# j) @9 P
  172.   va_list  argptr;
    ' E! g) z, u# f3 Q$ D! R4 W# P

  173. 8 u% M7 V' A- Y- U- |( A2 z
  174.         va_start(argptr,message);& I, H' w0 _7 D. j  q9 `% a' w
  175.         vsprintf(szBuffer,message,argptr);6 V8 u/ V: a( w9 U" K1 \; u5 g# ~  Z
  176.         va_end(argptr);0 X5 }7 C* a) ], B
  177.   fp=fopen(FileName,"a");
    ' y! j- S' p# ?$ @4 r
  178.   if(fp)/ m6 i1 I) Z  K- J; N
  179.   {
    9 y' A# ~$ O3 r- W: P
  180.     fprintf(fp,szBuffer);
    ; m% \7 ]8 m& L1 P. @6 D: r
  181.     fclose(fp);6 r1 Q: I; Y, i' r& H2 t& B
  182.           _flushall();
    6 l' ]$ j6 i/ L1 r2 y) a
  183.   }
    3 j# T. n) ^& G1 j9 @6 b
  184. }
    $ n1 Z! c1 p% t, F' w- k# ]8 V
  185. 1 o( @8 s9 l# L/ {' |
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 z5 ?0 u, W# G" \' p6 O
  187. {* `+ u- N$ h' R
  188.      FILE *fp;( ~+ w2 ^6 M( O* |
  189.     DWORD  attrib;8 E  g$ \& Q( c7 Y' S
  190.   attrib=GetFileAttributes(FileName);
    7 k: u/ h: w9 f5 I
  191.   if(attrib!=-1)* L9 ^" n1 g7 u
  192.   {8 ~+ T& @# Y0 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! B6 W7 v4 ~9 W" `1 J' ]7 |9 d
  194.     if(!SetFileAttributes(FileName,attrib))
    : F- H7 @  ]  W- T7 L# q4 K' Z
  195.     {- a( X' \3 _/ ?- a
  196.       return FALSE;
    " ~1 L; P8 ^! f! G  S* s
  197.     }4 i; c. \! x# R0 d# m) p
  198.   }
    & _' _. E+ V6 A  x7 Z
  199.   fp=fopen(FileName,"wb");8 X. b! p- C% f
  200.   if(fp)# l' K0 ~( h4 u) s
  201.   {& X/ S7 d9 j+ m
  202.     fclose(fp);
    $ O1 h/ _: D, U
  203.   }0 A( B7 r8 S% s7 G/ L& C2 s/ ~
  204.   return TRUE;
    " C4 q: s0 b7 @; l  h# h- _
  205. }& t9 a# u" c% t% I# [, O4 e8 S( B
  206. / e- U, h% \1 V5 B8 F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + D0 R1 |# \% x5 l* i4 g
  208. {7 R2 o9 e0 H7 s3 k' o
  209.   char filename[MAX_PATH];- S1 @, E" n1 Z( G* Z# l" w! ]
  210.   LPUPDATEFILE file,olds;6 m+ ~' n0 k9 \* G7 s; s% |3 x2 G" P
  211.   std::map<int,CString>::iterator i;
    % F  S( c$ K( P. p! {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 B6 ~: |, P/ r4 T( J2 |0 F& Y
  213.   std::list<CString>::iterator l;6 N5 n0 `9 S2 Q' z7 j

  214. % Z" \2 F( X1 l( [: W9 j0 p7 a: ~
  215.   if(bFirstUpdate)$ T3 q9 A( J- N, n
  216.   {
    2 Y: g% n' E$ V2 G) p8 i
  217.     dwCurrFile=0;
    " g5 i) |) }# b7 O  k: |* A7 \5 }1 }" K
  218.     bFirstUpdate=FALSE;7 d& V! l( a) }% i( v% x
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! }: l; a" }! W7 G' b
  220.     {
    : P" d$ _$ ]" N# {& r1 t) _5 Y
  221.       dwTotalFiles=UpdateLocal.size();
    / J8 _& m- ^6 X- W$ \. Q- E
  222.       dwDownLoaded=0;$ d/ i' b9 I# y% O/ a5 j$ }, T6 Z
  223.       bSilentStep=FALSE;
    # f; Q+ G1 @2 W+ g
  224.       bCompressed=TRUE;* X3 R2 Z( L+ e7 O
  225.       strExtLocal.Empty();! G  a# y; y* w) K- B+ G3 z
  226.       strFullName=(*i).second;) p8 |4 D! z2 [& b2 H' \. T
  227.       dwProgramState=AP_CONNECT;
    . h6 I, h5 ]0 K* D- M9 a
  228.       return TRUE;
    ( `6 j1 W. v7 s/ l" F* A1 j
  229.     }: i0 K, a: P5 v4 {! q
  230.   }
    5 O" a, s5 W9 H, m
  231.   else if(bRestartUpdater==FALSE)" ?5 ?' d" O" ?, |/ H- Z
  232.   {
    & h6 f6 Z& ~; c3 s- W/ ]! L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% }1 N- C9 D- Q
  234.     {; l: ]# ~9 N% K6 r4 I$ Q* L3 C
  235.       file=(*p).second;& {# m% q# d7 k( |% G3 g9 z' N$ O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 `3 b2 v7 V; }& ^; P
  237.       {3 K1 t) o7 [6 t8 f
  238.         olds=(*p).second;/ B- |6 t' q: G1 b* Z$ N
  239.         olds->vers=file->vers;7 z  v5 H7 R5 J& w$ B" v* V
  240.       }
    , Q' Q. D9 @6 @/ [
  241.       else/ Z! x1 O' y3 J+ k1 I/ q" G6 @
  242.       {
    8 j. |4 l3 B0 X% p( P1 ]- {- g' s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 i" x, |  V, ?% U. x1 B) U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' F1 |5 m) p0 H& k; k! Q6 J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 D/ S& c, y; ?% t& ~
  246.       }
    # e; B' v' N; l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  M* Z/ g6 e+ g' z" G! r7 r5 S
  248.       sprintf(filename,"(%s)",file->file);, @) W. G- M: {/ T5 ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 y7 P& b9 h- V# h7 k7 b; J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ! O8 E; [8 ~3 J
  251.     }2 E9 \! y7 q$ I; i
  252.     dwCurrFile++;
    7 R6 C: R* B5 m* ]9 g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 U  Z* X) C& _5 T3 z
  254.     {
    ( P, x8 T3 v  v# i7 Z
  255.       bSilentStep=FALSE;
    * I( Z0 q# L* Y7 J
  256.       bCompressed=TRUE;
    ! o4 c) @! Q2 v* H
  257.       strExtLocal.Empty();
    5 n2 q/ x4 H" |, Q
  258.       strFullName=(*i).second;
    ) f* @: v, X; B5 |7 G7 Z
  259.       dwProgramState=AP_CONNECT;
    . E- O9 `0 _1 p' X, @$ R
  260.       return TRUE;5 H; {5 \- \% y, T! e/ w& M" G' k
  261.     }: ?! D( y: E# i2 F
  262.     if(!bRestartUpdater)
    . ?1 s) w. J/ W6 L2 ]9 D% e7 o
  263.     {  U0 |% [, T3 o% q, t" \5 ]6 Q
  264.       int iCurrSize,iFileSize;0 f* S4 Q1 r7 }2 K1 H
  265.       iCurrSize=0;
    ; Y! K4 r4 s4 N0 u9 P
  266.       iFileSize=UpdateList2.size();
    0 g. r1 I7 \. o- G. j# [/ d; |  ]% q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% e( O4 q6 S; r, b7 Z* h( t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ' Y+ K! n8 t0 q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 ]- ?& I1 h3 B7 E1 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ |6 P( _* M5 w8 K
  271.       Fclearf(".\\update.dat");& F9 E/ t2 b5 P$ Y% R. _
  272.       Fprintf(".\\update.dat","Bloodyf\n");; ?& E; x& d" X, Q3 s; f; {* G
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 h$ I0 t1 S: E$ \
  274.       {+ {& t! B" B' x6 n0 `) W: @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' ^9 z8 f& S3 x. |2 Y$ f
  276.         {
    ; H& L6 V( ^/ `
  277.           file=(*p).second;
    , Y+ o8 J  g; J& k: q
  278.           sprintf(filename,"(%s)",file->file);
    - r* p! K$ X, M3 B& S
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! E' \: r  v7 @
  280.           iCurrSize++;
    $ V4 |2 V) d" U9 `! T/ d& ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ G, q  p0 B( E) M  J# p/ F% R
  282.         }
    - x7 o9 P8 D# y6 [  y
  283.       }
    + C! a/ P9 P, i! P. K5 l
  284.       unlink(".\\update.txt");0 M& O( F" _) ~5 l! f
  285.       unlink(".\\update.tmp");
    9 G1 m9 j* u  j: g+ h6 p
  286.       Fclearf(".\\checkversion.dat");6 T5 ~- U3 G0 w) O4 ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    1 _# z! p4 l7 N3 h% c
  288.       if(UpdateLocal.size())* p" _8 Q# k% T7 A& I- ^. `
  289.       {  h* z. e& }' v* Q
  290.         UpdateLocal.clear();8 i* r; J* Y5 S4 R& q
  291.       }
    5 I- b: |' V8 ?) L
  292.       if(UpdateFile3.size())$ N, H0 x- C4 d7 k( w' U
  293.       {" }, O; M. A& x- a) {
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - C8 R/ w, r& K3 c) Z/ ^
  295.         {
    , M- y! y, ~3 `* J. }' Q
  296.           file=(*p).second;/ G0 F& a& r" J3 ]; \
  297.           free(file);: G  _2 y; N, Y9 j' e1 X% @1 c
  298.         }8 Z, S5 f% t$ u7 a6 h! \
  299.         UpdateFile3.clear();# z. T& G3 X, L& |# f
  300.         UpdateList3.clear();7 e: ~2 N( c! r0 o
  301.       }
    ! u: Q7 R0 p/ Q7 X, W
  302.       if(UpdateFile2.size())
    2 {  `2 z' Q0 X" n) D3 E
  303.       {
    ' W" X" c8 y) R8 p2 G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- N0 _2 G. i$ Q  g& a2 R& }$ j3 m# r
  305.         {9 c' ^1 [' b# k1 _- m) a
  306.           file=(*p).second;5 y  ^& L4 t8 o( P1 \1 w
  307.           free(file);1 _; e. o4 }6 ^( k* `
  308.         }
    8 B0 O- ^& O* \" l
  309.         UpdateFile2.clear();6 `" z( x7 D+ s- N
  310.         UpdateList2.clear();/ J/ G2 r  B2 U2 L- ?
  311.       }' I5 G& [/ `6 l/ _- {, Y) g
  312.       if(UpdateFile1.size())
    : ^7 Y/ D$ M. E3 u* n
  313.       {
    1 D( E- c6 c; Z2 Q# K' ^0 C
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 j" E. ^) L" t9 E( s) t
  315.         {
    6 p/ E) W5 }, \6 g+ J% c
  316.           file=(*p).second;8 c9 C& `; q1 W8 y1 m
  317.           free(file);7 a! l& ]; I) a  G: T7 T
  318.         }
    , h) Z0 w* Z' D
  319.         UpdateFile1.clear();
    0 U, H1 U1 h. r
  320.         UpdateList1.clear();
    - P/ {# l. B# L& _
  321.       }' o# B4 e3 \$ U/ C) ]* W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 ?6 e( W* q7 W( i# b
  323.     }
    / T- t3 s3 w0 Q. u" z$ e: Z/ W4 R3 i
  324.   }8 F) V- i9 ]2 D- C0 n+ G2 ?
  325.   return FALSE;
    8 I' P5 I! w8 }6 {# K0 F9 g8 i2 o
  326. }
    / L9 k+ d, c- w- Y2 R

  327. 0 S/ x+ D9 q/ \. P( v
  328. void CRevAppApp::ClearAll(void)+ F1 b7 \7 u* z
  329. {3 l0 R( h; U' w. `, w
  330.   LPUPDATEFILE file;
      Q/ Q8 W  n7 s6 R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    " V1 z1 S* E- }, m
  332. 8 B! t6 l3 ?4 U5 _9 [
  333.   if(UpdateLocal.size())
    6 ^% r( N$ T' F1 C2 _  B4 G
  334.   {
      Y7 Y4 V  Y" V
  335.     UpdateLocal.clear();
    % n3 C. A3 k. e
  336.   }
    : ?/ ~* P" Z. k  O
  337.   if(UpdateFile3.size())
    + O2 q4 T% ~' ~3 B0 W% I( q  y* |8 K
  338.   {7 ]( a, I% @0 }  z/ I% E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 t4 ]8 c7 u+ R" U6 u) l& Z
  340.     {
    $ l0 s/ k  D9 t
  341.       file=(*p).second;8 X/ Q) S( r5 s, U' R  ]
  342.       free(file);
    " @2 C, E; y; U  V2 z
  343.     }
      A* R5 z% T2 {5 k: L6 w! B
  344.     UpdateFile3.clear();! d+ Q/ b/ G- }2 q
  345.     UpdateList3.clear();  c4 V, U8 j6 C, F: \' G  `
  346.   }
    3 O5 f& R3 ]* C9 Z" i7 X+ d
  347.   if(UpdateFile2.size())
    : D/ Y/ O9 J* o& R' ^) C5 p6 s
  348.   {
    - T, S' X& r9 c! k3 b) j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 }( u$ Q6 V. {4 B4 ]% Q# X& J" G
  350.     {; G% U* |6 i0 L9 P" L( z) P
  351.       file=(*p).second;
    . D& [4 a+ C2 H9 I. @" x) Q
  352.       free(file);
    0 R1 ?1 e3 L7 g3 e4 C
  353.     }
    , y% N0 m. s- ]% U/ D) I9 M
  354.     UpdateFile2.clear();
    ) o+ X( F: m3 |  @9 f
  355.     UpdateList2.clear();
      y; ^" n5 Y2 o! z9 H9 p/ ?5 L9 g7 F
  356.   }
    0 D$ j0 N8 @6 O. E5 {
  357.   if(UpdateFile1.size())1 y( b, J0 I  e( X
  358.   {
    / H$ b  R. @' {; F6 ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - v/ `0 ^* I# M% `; U3 F) p( H: p
  360.     {
    9 [$ j) @7 G+ n
  361.       file=(*p).second;2 r2 L' o/ D1 v8 E
  362.       free(file);
    # u0 l# _2 J* o2 N& D9 f# g8 m
  363.     }
    4 r2 y5 @, o, G& h+ l
  364.     UpdateFile1.clear();1 V, i3 a- P+ c, g  v1 `5 l! f
  365.     UpdateList1.clear();1 r7 M+ o# p7 Y0 q- C
  366.   }
    , h; C% ~' w8 |, T3 s/ f0 ^
  367. }  
    7 ?  [* ^6 s$ D( e( [
  368.   
    6 f" S1 y' O# K7 R
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 t, s8 w) K  g1 [2 {7 a
  370. {# p; @& g+ ^$ n* {0 _$ i
  371.   int c;
    + p! A* A) V, {& H
  372.   LPUPDATEFILE file1,file2;0 Q! P& H2 q& u7 x
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    2 x% M! ?3 ?8 D2 [
  374.   std::list<CString>::iterator l;
    ( @! f3 y# E6 L: E+ D
  375. 3 ]7 h. X% V+ H8 r- T. ~* Z
  376.   UpdateLocal.clear();
    6 E$ r6 Y, u. n  D" }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      _" s$ u/ e8 O0 a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  X: S& {; h) J6 j- u5 [
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    3 L6 G9 B, d+ A$ i% A* q  w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " s' K" R8 ~: C+ o& ?2 I$ y
  381.   if(UpdateFile3.size())
    9 t5 R" d% P5 @" r" }
  382.   {
    2 S0 v5 t" g: t/ j# |8 E# A" P
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)0 V$ ?3 d) D2 Q, E$ l
  384.     {
    , n  \+ ]$ F% X8 M
  385.       file2=(LPUPDATEFILE)(*i).second;& X0 N& ~# {- R3 G
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , w1 o, V3 n1 M
  387.       {/ P/ E9 d) B$ R
  388.         file1=(LPUPDATEFILE)(*p).second;. Z4 k8 b: M- M' S. ~6 D3 U  X
  389.         file1->vers=file2->vers;
    ' k9 I0 S' y9 e1 ]
  390.       }
    - S: I/ z$ H" f1 F# H" [! M) f
  391.       else
    1 `' k4 c$ Q1 ^) j0 i' {. [
  392.       {0 P8 o) a  _, D, z) g" W
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . Q1 S1 h9 |. a* X: Z8 c! A2 K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    1 s; S( W! T: s- V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ i6 X+ M: [% R, n8 B
  396.       }
    3 u8 [. o+ r2 j, _% D  N7 E/ F
  397.     }- K$ ]- g7 \5 x/ p7 r. y- ^
  398.   }
    * j$ e! C0 }& W2 N* G7 W, O: t: i8 d
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % @! t7 ^  k8 b/ _2 c
  400.   {
    " I, i" r, q% b' J" U7 i8 J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ; D6 \5 A6 O! Z8 v) K2 h
  402.     {
    $ [( n: k2 T" D( l$ ?- y  b
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( U# V) m4 T6 D6 a; \. u, _/ V2 e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % B% ]' B) s0 {- L! q5 ~* z
  405.       {
    6 Q- M3 M7 |# u, |0 L1 d
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 w+ m" d9 h3 @; x  S* H
  407.         if(file1->vers!=file2->vers)" d" \6 M8 ~5 W! d+ {
  408.         {4 L* p* C: p# V2 \$ a, A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* u3 f' C7 S" p; N5 A8 B2 l+ D
  410.           c++;
    , ~4 p, Q( F1 V- q% m
  411.         }
    9 S$ ^5 a3 G. w% q' g0 t( ~
  412.       }3 U' c% o$ [3 ]/ C# O3 F' P2 h4 l+ q
  413.       else8 S7 X3 e5 k. }  V
  414.       {
    % \7 z, A& d- _2 y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 g, E  ~6 F1 A7 c8 V. v1 H! K
  416.         c++;
    & h, ~; V+ w8 M8 S1 a, R+ {  I! }8 m
  417.       }
    + p# J2 Z" @3 q8 ]2 U( k7 [
  418.     }8 W9 ~6 N0 ?! p% B, B
  419.   }5 g  d7 W4 a7 `; {% Y4 U
  420.   unlink(".\\DownLoad\\update.txt");
    " L! s; w; u, ?8 x8 J. e; I# c3 V
  421.   if(UpdateLocal.size()) return TRUE;# V8 g  k3 s0 `1 n( ]- B6 Z
  422.   else                   return FALSE;
    2 O& |% M  M( c4 n' `
  423. }
    ' r" L# ]9 W' E

  424. 9 G( D4 u/ ~- v# ^4 X) J/ O. B" w! a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"8 u" X/ [, m# w. r  w0 `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , f# ?" s* e, R5 M# P

  427. , K! J; A6 Y& A7 r8 }
  428. - b# q0 W9 }) P7 O, k

  429. 1 }/ ?4 k/ y! d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 r% w( _3 z( [# x5 n+ F" i$ U: a- M
  431. {
    + r% p& u7 L+ X
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / e5 X9 Q. B9 r9 W# |( f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * n* ]( B5 N1 q" D) q' F
  434.   {3 x% b. ^$ y6 e/ N! G
  435.     char szLanguage[50];
    ! r/ S4 ^( E: e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 Z: J* h% W" P" ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 }6 U! H! V6 W. q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : E$ f( m6 E+ e) n4 T" Y9 {! W
  439.     else                                   m_iLanguage=ENGLISH;
    " @2 K' B7 {& `5 |6 U( I
  440.     char szRegister[100];' w: _" D& H! |8 J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( ~8 R9 O- F+ y6 v6 S/ m
  442.     strRegsName=szRegister;
    ( S. F  P, y5 g* N
  443.     char szPatchURL[100];
    6 R/ b" H: L7 o: o% p( b2 |. D# w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 B7 i1 }% K3 A. L$ w$ ]1 g
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ }/ ]+ l+ P4 i; d, v: h
  446.   }
    - G$ x$ C9 w  R2 g0 p4 R& a6 V
  447.   else
    . e5 ~; J5 s. c( N( B  L5 k
  448.   {
    ( D3 L- W5 p6 d6 V% ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ p& T! G2 L4 O% t# s4 b6 T4 L
  450.     strRegsName=DEFAULT_REG_URL;
    % t" C" T3 N# F8 {/ d/ I1 [7 I
  451.   }: e" k3 x: u, B0 o/ T3 s
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 _9 N4 `4 Z) |& b/ m0 t1 y
  453.   {) X% `2 Y  g6 N9 l9 W+ l* v
  454.     char szIP[50];
    2 X+ A7 B$ w: M" {, u! `3 `
  455.     char szDIR[300];5 l6 ^( D' E4 K* @( f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % [+ C5 y2 u& @3 }
  457.     {
    ( Z2 e1 t* ^  W6 v1 q' U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 m; k( R4 I8 }  k& Y# {0 M
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 r- T2 {. j, L: v
  460.       strHostName=szIP;
    5 k; k6 R8 R/ Q" S4 i
  461.       strHostPath.Format("/%s",szDIR);
    # }5 v8 Q6 g3 G  v( a5 {7 |
  462.     }' _( U3 K5 b; \4 n
  463.     else
    8 x7 E. z( l1 K7 C$ Y! q: y: |
  464.     {
    1 {1 {, |, K# a. ]: N
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 k. Z. }8 a6 L5 M
  466.       {, M5 x/ A& @; @" I. S
  467.         char szLanguage[50];% i% [+ x  H' B8 p3 {5 j+ B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 I  \1 z( p6 b1 m9 Z0 ^9 P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 p' m- F, P! \+ `! @; k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; v7 h  g( p2 j( C9 J
  471.         else                                   m_iLanguage=ENGLISH;% j) f* I) [6 B
  472.         char szRegister[100];0 k7 U$ M! ]. b6 ]1 r3 R9 q$ g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 y5 o/ O) a# k' y0 h0 Z1 g# S! E1 h
  474.         strRegsName=szRegister;
    3 C) W7 ^! A( m: U  ^( C
  475.         char szPatchURL[100];
    " T" `' y7 u! G) `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( y7 P1 U$ M9 E" w3 Z1 S& P: M. g. `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , ^' s" N# Q, k! |
  478.       }" H* S* \+ m! ^' I
  479.       else" y# X+ U0 j% i4 U
  480.       {
    , m8 I) m  G0 T3 m! ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 W! B1 }4 X7 n
  482.         strRegsName=DEFAULT_REG_URL;
    2 Q+ ^' F: D( n2 o$ v& M
  483.       }
    4 v# N- D0 N) k7 |: x( d, M
  484.     }
    7 d0 r. n$ D/ n5 s6 w6 w& Q
  485.   }' d6 G" I$ i4 h1 r2 v0 k
  486.   return true;" A; l+ N% a. R/ A
  487. }0 @. f9 M( N2 p2 e- @$ ?; T. S0 j

  488. 1 \0 d% i) F8 B$ S2 Q* z& ?' q
  489. #include ".\ZLib\unzip.h", @  G4 J+ h) t. F' `0 F* W# ?4 x2 N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" p& T* v4 }0 }4 H, d: s
  491. /////////////////////////////////////////////////////////////////////////////, D( F$ s2 |! @+ E+ y' S
  492. // CRevAppApp initialization$ C5 e2 b& n$ |: O" z4 M: X( X
  493. ! H0 h! Q2 d- u9 u/ M% p
  494. BOOL CRevAppApp::InitInstance()3 B) e9 |4 R2 E2 R  C6 K" X
  495. {7 `5 v7 c( Q. K9 c3 r
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ j0 F- ?! q# l  P- n7 o
  497. 7 P" X; O; z; c) |; k5 o+ @; `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 r7 D; Q) \4 d, L0 `: s- P7 h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& O& s9 h% k: c" a% [5 g. b1 c; H) @
  500.   {
    7 Q5 b3 G$ y" I$ \7 E- Z( V, i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 Y, e# o% X6 z9 J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 u& F' d1 }# [- W1 ^: _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( \2 o2 ?4 k0 S" `; O$ E
  504.     {
      l% T% z% M6 y8 z. z" v4 D
  505.       strcpy(szPath,szPathTarget);5 L# K: F. k4 b! T( Y
  506.       SetCurrentDirectory(szPath);
    . l0 Y" O2 j2 J# ]5 m; \/ u
  507.     }
    7 w! M; l9 m- W* E1 z
  508.   }4 `6 S( s( j/ N6 A" D* W6 h; N
  509. #ifdef _DEBUG
    8 B2 R% W4 M) J6 t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ b# s! b+ Y2 c5 ^- y
  511. #else
    7 m0 |7 n. ?0 @& ?/ y% x0 [: ?! q/ k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 W- Y4 {- Z3 b' n, q/ U& Y# u
  513. #endif
    " C  t) r. b; ]6 I& |5 `+ i' K
  514.   {& t3 S( c  l' t' t3 X# i: z
  515.     char tempFileName[MAX_PATH];
    7 P, S$ S3 Y1 b% C
  516.     strcpy(tempFileName,szPathSource);3 x# s4 s+ z# y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 F) i: {$ ?+ H6 A3 g  t/ ?' j* U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, \- V! [, h' ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 R, @' u; ?. g
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : L# p6 ^8 Q: I# q; M( U# M6 J
  521.     return TRUE;
    ; l/ T' X- e: l4 O9 L1 u7 H
  522.   }4 u  }% B& F4 |! ~8 S) U
  523.   // Nuke 0118: Delete run.exe0 Z7 W* I, E$ ]' B: H; x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% I1 ^1 [, i8 U; F/ P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& O& p( t) D: K. K% O  o' _
  526.   if(!ReadCfgFile("Config.ini"))
    ; Y2 e, O, W2 J/ G/ l9 }! }2 d
  527.   {
    5 W9 a( n9 F" g  K- s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! o# F8 Q6 m* S6 W& `
  529.     return TRUE;+ O5 F8 T0 H  H; f8 i
  530.   }! U# P. N" B* W
  531.   HANDLE mutex;
    ; j3 \: @% p6 Y. h' p% v6 {9 [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " ~$ D" C8 ]6 p7 y& {: H
  533.   {
    " T, q* x$ R# v  ]" S& I1 s, X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 y1 [$ N3 i  m+ A
  535.     {- C- q- R, k: G& ^3 F
  536.       CloseHandle(mutex);
    ) h9 G2 f! f2 r' F/ }( a1 }* F5 u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. K* S7 r( e+ L2 f: W" d: z
  538.       return TRUE;
    2 E0 {+ {! P6 \; A% f, t
  539.     }4 ~+ q+ |# T* i5 a$ x  p
  540.   }  
    " q: A% k& Z* H8 r- i! J% y
  541.   CloseHandle(mutex);
    $ a$ C3 m5 N6 C: Y' W: U# a  o& a9 J  }; c

  542. 4 {9 _2 z/ k3 t& @7 ^9 e* ^* W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 u( Y' T6 ^5 t' Z) R% x$ U2 A

  544. " {. G& |$ {4 E) Z3 _8 p
  545.         AfxEnableControlContainer();
      u' q, p' a! v% u
  546. 6 s- k4 R6 p2 Z* ]! G. a+ L# d
  547.   bCanUpdate=FALSE;
    2 n. W* a7 o$ Q
  548.   dwStartUpSteps=1;
    ( f+ c$ }& w4 n1 h& x
  549.   dwProgramState=AP_NOTHING;
    , ^- a5 t4 L3 \! P4 _- t; n# D- n
  550. ' w8 a9 C# g5 z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      K' b& m, Z% Y1 u: [. a$ R

  552. : S: q; V; s6 Q# @
  553.         // Standard initialization1 @' n' r* _3 o; j  c: `, c
  554.         // If you are not using these features and wish to reduce the size# G9 |8 P( |# J/ L. u6 H# X8 b
  555.         //  of your final executable, you should remove from the following/ f  S2 W. n* n5 c9 }, ?9 h
  556.         //  the specific initialization routines you do not need.) z& W- v# n6 J8 |$ s) @
  557. 9 O5 n2 D' M$ ~3 ?3 K' f9 o& w" O
  558. #ifdef _AFXDLL8 n. x4 X! Q& K, c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % q  K4 R" j# r$ c6 g) l3 c9 `
  560. #else# X$ ^) @5 x- A: n- Z2 G1 J/ f1 j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + m1 a2 o. U$ y9 j  I5 S
  562. #endif
    3 @; `1 ]1 N" ^# G/ t$ n
  563. # C' L9 z% M- H4 y7 j7 I
  564.   dlg=new CRevAppDlg;  k, ]2 l3 @; j* w
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 B! H( ]4 m$ p3 K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    3 B5 G5 {  W8 [6 F' Y
  567.   m_pMainWnd=dlg;, q: _, x3 Q4 m& v0 F
  568. ! x6 L' d& z9 {% Y. s$ @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: V0 Q4 h6 S( A) I3 [  T
  570. 2 j8 M% q  ^& J  o; O
  571. //  GdiplusStartupInput gdiplusStartupInput;% e- Y: m8 f4 x4 @/ O9 f9 u
  572. //  ULONG_PTR gdiplusToken;% V, v& M; b( f8 G, s
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' y& `/ n% ^  X7 U
  574. - O8 z  f4 T6 n+ m5 I* @! q
  575. //        CRevAppDlg dlg;
    2 @2 a& ?, L& S; V7 p4 o
  576. //        int nResponse = dlg.DoModal();  D  w* @5 M3 R5 e! V2 d. R
  577. //        if (nResponse == IDOK)
    $ Q- q4 G6 N4 m: \+ m/ K
  578. //        {
    ' \; s2 Q7 W/ p, p
  579. //                // TODO: Place code here to handle when the dialog is
    ( f, h, A/ T: z! K( ]4 G# O8 ?
  580. //                //  dismissed with OK9 }+ W; Z, V* w* c* `
  581. //        }
    6 \6 D1 R) e$ E+ w
  582. //        else if (nResponse == IDCANCEL)
    6 E# F+ x) W) Z2 y6 A$ \
  583. //        {0 N" N! ]* |' `
  584. //                // TODO: Place code here to handle when the dialog is/ h" P* t" N+ A* {' M
  585. //                //  dismissed with Cancel  Z  R* [" n/ s; U( l' w
  586. //        }
    - a0 ]4 b% h4 ]4 k2 j

  587. # c8 _+ z4 Q( ~2 i. B* @" P% V. ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the* o$ B7 C( @$ g6 C5 k
  589.         //  application, rather than start the application's message pump.6 e0 n; Z7 t( a  [3 s1 ^# ]7 g
  590.         return TRUE;
    8 h  i5 [# M5 o3 J5 Y+ d6 U0 I
  591. }8 `/ ]; r. C, C' n9 P
  592. : y3 Q2 s) G/ D: @4 T5 U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * g" _4 W- _' `0 I* V
  594. {
    0 E) [6 `: S8 `% W/ E: N% a2 Z
  595.   int i;
    5 |' N3 l7 P8 X
  596.   char *szRet;
    . f% n3 g& t7 |2 z
  597. ; L, c# ?/ n# [& ]$ b) i: R
  598.   if(pSource) { itoken=0; sztoken=pSource; }" X$ }4 G- Q% G! [2 L- x% a5 |
  599.   if(sztoken)
    1 d$ l/ Q9 m7 l! M% ~
  600.   {' x) ]! Q2 F: G
  601.     szRet=&sztoken[itoken];
    4 Z, H- P: U8 o" E# }' Y) ]* Z  |) c& I% f
  602.     while(sztoken[itoken])0 C- \1 Q( @, _9 [
  603.     {' l1 J8 q' s. |7 ~" I/ e
  604.       for(i=0;i<(int)strlen(token);i++)
    * U3 J% E, {( s! x5 r
  605.       {8 x3 U! ~  ?7 r- J0 D$ E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), v6 j; D% e8 z
  607.         {
    , c5 }7 e" R8 o& @
  608.           sztoken[itoken++]=0;
    ' U6 K( `+ r. Y5 Q
  609.           sztoken[itoken++]=0;/ }( o2 ^! l7 n, x$ z$ M( S" T: n
  610.           return szRet;: ?, v" f; O; F5 q4 ^
  611.         }
    & s3 ^8 n6 p5 C2 {: e+ j% j
  612.       }! t" }  \& j0 h& D; H, F
  613.       itoken++;  b' X  C0 X$ k6 C: t! X: z
  614.     }3 v) ^8 A5 u8 ?& ~- z
  615.   }3 \; F- _3 t& d
  616.   return NULL;( Y) N1 P8 C8 \4 O3 z$ D
  617. }+ e. p4 Z! a9 G5 K
  618. ' g, i- _5 {  u5 I2 h
  619. void ProcessProc(long Total,long Current)1 \4 a; A* f: o; {: a
  620. {
    0 K- h! w7 ^1 e
  621.         MSG msg;9 }* b5 h1 V- {/ u) r2 `6 e% L/ i1 b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 r! `: {! ?+ s7 b, w! t1 V0 k
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, J, A% ?& }* {/ M! I8 o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))( K7 G! h) u/ B5 b" H
  625.         {9 n6 P4 [) x6 K( s& r% W3 s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 S/ M" S. x, e# G1 ]3 \
  627.                 {
    % P) J, ~# }: r4 |! Z1 d' P
  628.                         return;+ i. T1 V0 c& h$ n$ \
  629.                 }* b! j6 B6 T% r' I( E# A6 l
  630.                 TranslateMessage(&msg);
    0 L1 c& \/ q+ S$ v
  631.                 DispatchMessage(&msg);2 N, Z8 G6 l3 {4 D
  632.         }       
    * `3 C2 P7 g6 g5 T1 o
  633. }" J- I8 ~% A8 J9 S

  634. % |6 }2 _! L' S# @- j+ p( `
  635. BOOL bFirstChar=TRUE;
    # G7 P( _) `3 ~6 r8 u# t* w& I( ]

  636. 9 t* q: u/ |8 [  `; q( N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . M/ @( {0 q  q
  638. {
    5 Q1 d7 F) {/ s/ |. \! K
  639.         // TODO: Add your specialized code here and/or call the base class. G' M# ]  t* f4 b: w
  640.   switch(dwProgramState)
    ) t8 p+ _3 I4 G+ p( i* H& _
  641.   {. J# p$ v$ C/ M  k$ R6 m
  642.   case AP_NOTHING:# t& G' p0 k! [$ q& O
  643.     switch(dwStartUpSteps)# w+ g/ _7 n  Z; K1 Y+ `
  644.     {( x7 h- M6 K. q+ z! t' `2 f
  645.     case 1:: y: n) _4 P0 X7 U% A
  646.       {
    , g1 h; a; Z( y% w' r
  647.         int i;3 |8 T# k8 q* R3 B. J: l, L; \' n
  648.         CDC *pCDC=dlg->GetDC();
    9 [& g. {3 a3 m" c
  649.         HDC hdcwnd=pCDC->m_hDC;2 L% Q2 Y7 I2 d% F! C$ ~# L
  650. //        Graphics graphics(hdcwnd);
    ! Y& `$ ~; e* ?2 |6 T% y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 o4 M/ i& ^+ N( |
  652. //        INT iWidth=bitmap.GetWidth();9 ~  z9 @+ `9 K( g- u' v
  653. //        INT iHeight=bitmap.GetHeight();
    2 G2 |" t9 w/ z1 O: b1 \, s
  654. //        Color color,colorTemp;
    # p/ X% B1 V# _& L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 B8 v/ M, }$ }8 j) ~' c
  656. //        {
    ( o: ?3 J) s( z9 l( ?0 C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : T/ O+ R3 g+ ]! ?7 w
  658. //          {
    " y' Z2 i# T  [% B
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 I5 d1 ~1 k+ Q- x1 U7 g+ \
  660. //            colorTemp.SetValue(color.MakeARGB(  f5 _0 M1 Q0 Z
  661. //              (BYTE)(255*iColumn/iWidth),* B7 `) u4 e5 o' _
  662. //              color.GetRed(),/ Z) A+ M0 ]- P2 O" X0 z+ R! S
  663. //              color.GetGreen(),- ]$ H7 V- _/ p. B
  664. //              color.GetBlue()));  [0 t* |& _7 J8 o/ }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    : q. M5 \3 z- y
  666. //          }
    , \# k8 n, U5 x) p- q& q3 G' h
  667. //        }
    ) V8 x% K& k) q6 s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 q5 s( s! y9 Q3 C7 `- E2 y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - M/ T4 p9 h* G) q* M# }0 j0 x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' k& Y! c* {2 v- A
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 n9 b/ L& `! ?7 o$ b, ~
  672.         for(i=0;i<240;i+=8), C) {6 u: Z! I! u4 `# H1 ~8 N! c
  673.         {
    # t$ t( }$ N1 |" z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( z  f7 J% [" C8 @; O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 m+ @5 v6 v2 [  ~5 }- U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* A1 s* x+ h. G8 z
  677.           Sleep(33);& @6 o/ o# B3 [1 `9 I
  678.         }4 \  ]) o7 A& ^4 C0 q
  679.         Sleep(1000);9 e5 e/ Z0 }: {" Y3 q$ O) `
  680.         for(i=240;i>0;i-=8): l0 x% P- Z6 \+ ]) @
  681.         {
    ! r% \' z' H4 H0 F
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 }5 F; K. }3 I8 i  i9 D, h
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , i" u1 q* E9 X2 d0 c5 g& i# I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ I2 e/ Y" Y/ u- r5 z: ?
  685.           Sleep(33);
    7 W4 c0 F- v8 |1 c1 \
  686.         }
    / G. Z" c) J( d" r6 e3 n$ V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 B% z6 |! m! w* G- f
  688.         dlg->ReleaseDC(pCDC);( e7 b- c8 o9 K  Y7 o
  689.         DeleteDC(hdctar);
    $ q0 _6 {* R6 g2 r/ G
  690.         DeleteDC(hdcsrc);
    : z: w5 y' G' L* _
  691.         DeleteDC(hdcorg);% e  _+ s% S- c1 U8 o/ d) }
  692.       }
    2 L. K) S9 A! O8 ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* q6 U" j- l$ k4 v5 P  j- i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ ~# J7 a7 ^# n3 a& Q8 }- r$ X8 y+ ^7 t. d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 _5 [9 b  k! E8 u# h! u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 V; v5 O: u& s: X/ M! ~
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ~& \# o) d0 k4 P6 `- R9 U
  698.       if(!Dn.Connected())& W3 R. s% |: m: H
  699.       {, R& s7 X9 i( u( z* C
  700.         dwTotalFiles=1;
    0 o3 [1 B' l* o$ R. X' y
  701.         dwDownLoaded=0;
    6 Q, R! \5 J1 b* t
  702.         bSilentStep=TRUE;
    6 m; U" d% e0 \% X8 U! ~, g
  703.         bCompressed=FALSE;
      F& b6 ]3 v9 p* p8 N. m
  704.         strExtLocal.Empty();, L0 E: j$ Z. K- R/ f: @
  705.         strFullName="readme.txt";
    ( M; d3 Q4 }) ~$ [
  706.         dwProgramState=AP_CONNECT;% Y7 A4 U; u8 h2 ?( Z% Z3 M3 M3 w
  707.       }: u! X/ D  {4 ^& O
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 x- c+ J. A9 y- U, T/ `) Q. Z
  709.       dwStartUpSteps=2;
    ( p3 Y( y/ d: ~4 t
  710.       break;
    : e2 S$ x# }8 k9 f7 Q
  711.     case 2:1 d, K' k; q# C  T( K
  712.       {: a2 f# n; G4 s* |9 k. G+ e
  713.         int iEOF;' h+ l) x) W8 A* |: d
  714.         FILE *fp;2 }  {% D  D' t4 S( g, y
  715.         char szString[512];# T; l8 U0 {9 N0 N/ A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 Y* H: \* Z  a+ V( z
  717.         if(fp)
    8 {) H' F* q& R7 x5 E
  718.         {3 J- W0 f9 `0 X4 g  e6 F( T
  719.           do
    - F( i- J7 o. t' t
  720.           {
      |( }+ o# ]* m; P' ]5 Q" N4 A5 m
  721.             iEOF=fscanf(fp,"%s",szString);
    0 v( c( |, O. f# Z$ a3 u) V! e
  722.             if(strlen(szString))
    % B/ N3 F& w5 u  ?* @- j0 o
  723.             {
    + x  F/ W& u9 H0 J
  724.               if(bFirstChar)
    % B$ r& s' ?3 V/ M% w$ V) k
  725.               {% F" v/ b* H/ y. b
  726.                 bFirstChar=FALSE;
    $ j9 u: D4 B5 M) e/ F. m+ a* J
  727.                 bConnectIsBig5=FALSE;
    0 T6 O- @+ q; H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    # M. b  C$ U5 |8 e0 _" Y# K" Q9 @
  729.               }5 s5 n& m$ m/ H' _: A
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - `; i) i$ W. G1 h6 q4 q9 A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 D/ e. q+ T* k2 n; j/ A
  732.               dlg->m_ListText.AddString(szString);
    : p" L% ^& \% G' y7 c% n9 r3 |
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 l* V# k; y2 [% ?- s2 O
  734.               *szString=0;5 O/ r( C9 C7 f: \7 S' Q# ^
  735.             }
    & F5 }2 X, h! y5 ]2 J9 H8 X: L
  736.           } while(iEOF!=EOF);
    4 m3 L* }/ k$ @: C
  737.           fclose(fp);' D: y; q# M4 X; l, h
  738.           unlink(".\\DownLoad\\readme.txt");7 Q$ d8 `9 s; ^( D: {
  739.           dwStartUpSteps=3;
    . |/ X9 h) [9 D' v
  740.         }
    4 ?: H6 k2 A4 c/ a/ `8 ~
  741.       }2 E2 {7 S0 u5 F1 A0 ~8 [$ m  K
  742.       break;
    + k' Y; ~: \# Q% F  M  S3 N
  743.     case 3:
    : H. T( B* r! O
  744.       if(!Dn.Connected())
    8 A. b+ a8 ]1 K3 `6 d8 o/ \$ ?7 [* V$ y
  745.       {" z. I; Z# _% w: _1 q/ e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, u4 Y- o& j/ ]1 D
  747.         dwTotalFiles=1;- l+ n6 `8 F4 m( o
  748.         dwDownLoaded=0;4 M3 V1 A) y1 Z6 ^
  749.         bSilentStep=TRUE;/ b& u/ t5 ]9 n% c6 T' G
  750.         bCompressed=FALSE;: ?+ _$ Y/ Q9 ^; o
  751.         strExtLocal.Empty();
    - ]! a9 s  G. E
  752.         strFullName="checkversion.txt";, d6 M; g5 G; i0 f9 R9 A1 r3 Y
  753.         dwProgramState=AP_CONNECT;
    ( w- o) |1 U% |& s
  754.       }7 A6 l% _, l4 [" q3 p7 [
  755.       dwStartUpSteps=4;0 K4 A9 I0 [$ F8 r
  756.       break;
    % Z8 D2 f6 i* p7 r  o1 Q
  757.     case 4:
      j+ q: ?; v0 g, z& d
  758.       {3 v3 G% X0 D- m1 K) E) n
  759.         FILE *fp;
    6 q7 J' W, R2 i" ?
  760.         char szString1[128];
    2 ~% q, b' T5 A" f3 v
  761.         char szString2[128];" H1 T  T: K- s
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # s$ `( f$ {' U* y! g$ s
  763.         if(fp); H, ^+ W) ^+ x
  764.         {* i+ d* ]& T# `# b+ j# P) B3 z
  765.           fscanf(fp,"%s",szString1);( r6 }: n% T3 \( @, N
  766.           fclose(fp);
      g% ]* T3 M; |/ V: E9 H
  767.           fCheckVersion=atof(szString1);6 P" t& e; u" D  V4 ~
  768.           fp=fopen(".\\checkversion.dat","r");
    * M5 ~, N" {2 M+ Q  l7 V0 v+ f4 q
  769.           if(fp)# v4 p$ a* v3 Y$ R5 W
  770.           {8 z' D2 s) Y  d
  771.             fscanf(fp,"%s",szString2);
    * ?5 H6 a+ y+ N, z% Z, |
  772.             fclose(fp);
    : X! x; s# e0 J  V9 l* y( }4 u% _
  773.             if(atof(szString1)!=atof(szString2))& t9 |5 |1 \% e- ^& |5 N  S
  774.             {
    8 F+ P( R( @* ^* D
  775.               if(!Dn.Connected())
    3 |6 K2 O4 R+ [$ D, s- n: L4 q3 Q
  776.               {
    3 {5 w' c% G9 z* X1 n5 R4 z
  777.                 bFirstUpdate=TRUE;: k& A; p8 D. s+ C
  778.                 dwTotalFiles=1;% @0 g" y9 m+ c0 f5 o1 d
  779.                 dwDownLoaded=0;. F; D  e4 x6 ^$ ^' V# [7 S( i
  780.                 bSilentStep=FALSE;
    9 A( w- D6 |8 G
  781.                 bCompressed=TRUE;5 [/ S7 c) y% q! G& T3 f
  782.                 strExtLocal=".\\DownLoad\";; b. d+ C( p3 L7 p0 a& I( D: Y- H2 b$ o
  783.                 strFullName="update.txt";# j8 ]3 ]2 r* D) {' ?, Q
  784.                 dwProgramState=AP_CONNECT;) c# }1 {/ {+ Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ t/ S' h+ F5 Q+ C9 ]; ?
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 i) X9 i& Z" x$ A3 A* t5 F2 ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ M  x9 u' m7 E/ c
  788. ( t( W% h6 u; g! o3 M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 `9 I' h0 g7 G; B5 ^
  790.                 unlink(".\\DownLoad\\checkversion.txt");! F6 p& X- h% H8 P5 q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 B* J& O" [( Q& g0 h* N8 F
  792.                 {. B; O( O  h# z. v8 ~6 z+ L) K# q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 O- \* M9 |1 Q5 F  |
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' Z. h/ e4 `' J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# C7 n! e# I. M3 d3 ~0 f0 k9 F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ^' e- ^/ K6 N3 \7 c( i9 R

  797. 5 _. n. w; |3 F* y" W9 P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 \4 m1 T, C9 c, c
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : Q: _. T/ E/ p& ]+ [0 {6 x! N4 f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - n; W# F/ M. g4 Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& B; T. `- @& M, b5 u( q
  802.                 }
    : \4 L$ `; l! s$ e  J6 A) l
  803.                 dwStartUpSteps=5;
    7 B* f) ~+ h- y( @9 B0 V
  804.               }$ C# j5 O+ v' y+ F/ @0 e
  805.             }4 w* `/ ]& a' M! ?  \
  806.             else
    / P( |  Q' O- X6 A
  807.             {
    3 X/ ^, X. Q% {$ f0 ?4 R: e
  808.               unlink(".\\DownLoad\\checkversion.txt");3 e3 Q3 r* L0 k3 v9 Q) A) W/ i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" o6 [  ^5 `" f' g# w. Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 b# M9 |: p, g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");! `, I6 ^6 K4 _2 |

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

  W! c$ d. B( @1 M6 [9 V, @
# F  E) m5 V9 @" a* t0 d

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-6 08:17

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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