找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
' X& ~, ^0 _* L
  1. / RevApp.cpp : Defines the class behaviors for the application.1 B" Q0 A4 t1 t) H4 X0 @7 M0 T: E
  2. //
    + @" u2 H( n+ ~7 ^2 t5 E

  3. : F; b1 J; Q( ^: J. n: p2 \
  4. #include "stdafx.h"+ _, @$ y& e9 E

  5. ( _% I+ B3 \4 d& }/ ?. E& B
  6. //#define UNICODE
    / p4 R! `3 ^6 @4 \( ]9 i
  7. //#include <gdiplus.h>
    ( K; {2 T; T  R0 J- p$ F
  8. //using namespace Gdiplus;; o& Q- o% Q* H- m( ~( N7 t

  9. 5 h$ l, H5 [! ~/ d
  10. #include "RevApp.h"
    6 `9 I1 I! |3 r& b5 w7 f. z: \* _
  11. #include "RevAppDlg.h"  w1 _  I7 E- w, M0 O7 S
  12. 2 c0 H( S1 g' g
  13. #pragma warning(disable:4786)3 x: w0 D! x+ C  y0 Y
  14. #include <map>2 e0 S, |5 k. r3 ?
  15. #include <list>
    - _( x5 [5 G2 S8 [& V3 o# m' @
  16. #include <direct.h>
    $ l! w! x  V, ]$ n/ O) u' {
  17. ' G2 C# Y5 F! u) c4 d$ E3 }" _
  18. #ifdef _DEBUG5 l3 p( V$ h2 }/ m. q. J9 W& b  j  n+ ^
  19. #define new DEBUG_NEW& e3 N8 J8 v! L
  20. #undef THIS_FILE
    # p1 _- l: S3 _+ J
  21. static char THIS_FILE[] = __FILE__;
    # l$ X2 u/ p+ Z) D
  22. #endif, N: n' E+ S* L1 {1 i5 l" t) H
  23. #include "SkinResDef.h"
      b% L. U; C1 o8 a. D8 ~# s8 f9 Q! F
  24. #include "ChangeBG.h"
    / b9 u& W3 g" p9 m+ r+ Y( n# r
  25. #include "AFXINET.H"
    5 V/ R' d! n$ G( I
  26. 9 _, x, w$ z( B" @! r4 b( `
  27. #define TRADITIONAL_CHINESE 0
    0 t2 d( N3 p; r2 o' L' i
  28. #define SIMPLIFY_CHINESE 1" d9 t7 C5 s1 ?& s1 H: ~% o
  29. #define ENGLISH 2
    4 e; E: w. {! c
  30. int m_iLanguage = ENGLISH;
    6 W* ^( f  a( D
  31. /////////////////////////////////////////////////////////////////////////////
    # {# p+ B3 y* c. ~
  32. // CRevAppApp
    - M0 v* g7 t  Q' M9 r  c

  33. 7 J, C/ d2 t: W3 S: U0 E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 D! O& A* N" F# h
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 j8 N  N% A) }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: L+ ^7 B  f1 r: E" k0 G# l5 E) P3 q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% ]6 M6 q/ r! n. u& `# E3 H/ X
  38.         //}}AFX_MSG
    8 T. E; s" D( P3 E9 `
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 K1 @: e1 z+ ^+ |0 A( m9 ~5 l
  40. END_MESSAGE_MAP()
    / q  f* W+ \7 u7 }# E

  41. ( Q5 @' r* o+ v, s3 v8 o5 E
  42. /////////////////////////////////////////////////////////////////////////////6 I4 V+ R6 L( h
  43. // CRevAppApp construction- x3 `* z# K  {3 ^# j

  44. ( u+ X4 \% J0 e; ?; s' r
  45. CRevAppApp::CRevAppApp()
    5 _0 E; m6 \, v5 D7 k3 L
  46. {" W4 |0 L0 _' f6 K5 `# n7 a
  47.         // TODO: add construction code here,
    7 V& v. r1 c& x4 L) \2 J
  48.         // Place all significant initialization in InitInstance
    8 `9 e8 m+ s* I' A. d6 q2 C) c
  49.   bDisplayIsBig5=FALSE;
    % e; s" o5 m! y7 t9 t
  50.   bRestartUpdater=FALSE;) }( \- l$ i! U
  51.   bFinishUpdated=FALSE;$ I8 ]  r. D, G5 _4 G- Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% u$ `9 D3 E( [/ e3 H/ Q! H
  53.   InitChangeDataBig52GBKS();
    * L% A  H: M) N% T" f; n5 I2 p; _! @
  54.   InitChangeDataGBKS2Big5();
    ; |. \0 s& e& N0 X+ a8 l# @+ U4 |
  55.         //& g- I! K, o1 W3 U5 Q
  56.         bClickRunExe = FALSE;
    0 U0 N6 q, P# q0 d9 T
  57.         //
    $ m. s% ]8 {1 S6 f7 E
  58. }
    / T) I& q# S& c  a1 D

  59.   h% b' N- a% }* B
  60. CRevAppApp::~CRevAppApp()
    $ v7 w* w% K" @! _9 F/ x- a
  61. {
    3 ?! U. ]* O: m! u; r
  62.         // TODO: add construction code here,* m# f( ~, i  j, ^1 V  E. W& C
  63.         // Place all significant initialization in InitInstance
    ( |$ Y9 J& U0 c4 w7 @
  64.   EndChangeData();2 G0 [! b" Q3 s8 @2 K5 A% Z3 z/ K
  65. }+ k; B- E- ~6 `

  66. 2 F& e2 h# \7 a! R2 d" A! m9 E% M# D
  67. /////////////////////////////////////////////////////////////////////////////  h5 U& J" l3 Z- X0 e( J: ^
  68. // The one and only CRevAppApp object4 l1 O3 H/ g4 ?( l3 O

  69. $ A9 X- y1 ~% T  \
  70. CRevAppApp theApp;
    5 L3 R* e* c- ]
  71. 2 s7 ]3 D# T& G& M% N) y3 r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 T$ ~! |  L( t! f
  73. {% _, V$ G8 R& H0 r! C5 h, d+ _
  74.   int iEOF=0;
    , s+ a* F- D* P- q& H9 ^
  75.   char szTempName[MAX_PATH];
    : x% R. r- e* D
  76.   *szFileName=0;& J% v% m' U7 l# _: {  h1 C% P7 e
  77.   iEOF=fscanf(fp,"%s",szTempName);( m# }$ X8 u6 l& `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 H1 }1 b+ L+ r6 \5 f$ L8 b
  79.   {
    , q; J6 H0 H% r. I9 w0 q) X
  80.     strcpy(szFileName,&szTempName[1]);
    . ?6 T  A  V/ e" z8 d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)1 s: R3 s- @2 ]! i9 a+ p8 F# R+ E
  82.     {% ]' t  z1 b+ B; s1 I) k
  83.       iEOF=fscanf(fp,"%s",szTempName);/ n" f2 `0 P7 z! D
  84.       strcat(szFileName," ");
    ! c9 H6 e  g- v7 \
  85.       strcat(szFileName,szTempName);
      Q1 H% A' s0 R
  86.     }9 s/ u& y. p* L( I2 t  B
  87.     if(strlen(szFileName)>=1)# e/ ?5 K) ?$ t8 _
  88.     {" C$ q% ~; f, a3 d8 j# A/ X. H
  89.       szFileName[strlen(szFileName)-1]=0;
    4 x& S  q8 T# p$ o
  90.     }
    9 t- h, j) N& g2 N! o$ Q
  91.   }
    # _0 T- d; g2 D: l+ U
  92.   return szFileName;4 e& M2 j# W6 s6 h7 e7 E% m" L
  93. }
      ]$ B6 ~7 h9 N8 |- @1 w
  94. ) k8 v" d7 S( m0 ~3 d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 P8 ^+ a0 L  I1 {1 p" R. ~
  96. {
    $ z; [+ w2 Y: ^3 U8 R% y8 j
  97.   FILE *fp;9 Z7 g6 [5 g+ s# S. N0 n
  98.   char *key=NULL;
    0 B8 A! l6 B9 B9 ?. Y& n
  99.   char version[MAX_PATH];
    " Q5 Q1 [( k0 Y
  100.   LPUPDATEFILE file,olds;
    3 x; N) @! Z$ I' X3 I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 ~# l/ S% t& J3 W5 H- [+ |

  102. 8 e. [) [3 C0 \6 `
  103.   UpdateList.clear();4 _& T* g+ k" f# l# O. f6 q4 ]
  104.   UpdateFile.clear();
    ( z/ |# L) o5 ]9 s3 P
  105.   if(GetFileAttributes(filename)==-1) return false;
    * x+ a( Z) h, w
  106.   if(!(fp=fopen(filename,"r"))) return false;" f) y( L+ }# n
  107.   fscanf(fp,"%s",version);7 D4 u. O2 A4 H  o8 @: J  \. K
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - M9 ?4 s! J8 v& X/ y1 a
  109.   while(fscanf(fp,"%s",version)!=EOF)# }  g; K6 s! f  l) h+ a: Q" C
  110.   {& O$ q# o3 v' f3 Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- h# k& v$ k1 E$ `% b) b
  112.     fscanf(fp,"%s",file->path);0 ]% r+ t# G. N. j
  113.     ReadFileNames(fp,file->file);
    - z: i; f% y) w. ^
  114.     strcpy(file->full,".");
    ( |: R9 f# O' R& h9 |4 t
  115.     strcat(file->full,file->path);
    & K9 }3 _, t; P. x3 D& A
  116.     strcat(file->full,file->file);
    6 v2 O; s, v- a1 C+ X6 P  b0 i: `( L
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . c$ `4 J& g; S
  118.     {9 Q. P$ H# L1 I" x. j- w0 _
  119.       file->vers=(float)atof(version);+ l( X; ?0 {, U/ Z6 n% M2 m
  120.       UpdateList.push_back(file->full);
    0 d% @. X! O* _. `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 Y+ ^/ y2 |. a$ h. C0 r: Z- V
  122.     }: S. g- y! ^: G( Q5 s1 u5 o
  123.     else
    5 x  m- i1 _9 P4 h$ S( q
  124.     {- O& S" X/ t$ y3 ]. B  v
  125.       olds=(*p).second;
    ' ~$ Q2 w7 ?8 i* t
  126.       if(olds->vers<(float)atof(version))! T! N+ D) s: L: A
  127.       {
    ) P! g2 T$ p$ H% O
  128.         olds->vers=(float)atof(version);. i" H* U; B0 e6 d+ j* \
  129.       }
    8 u; z0 A$ K+ s" f
  130.       free(file);2 b5 {# V' s) }8 d2 K
  131.     }. Y& B7 o5 i! r3 r% e
  132.   }! ?1 X. F, F! U$ l
  133.   fclose(fp);
    $ M0 A/ x4 z) R! e; w4 f
  134.   return true;
    ) G3 N( n: r. z: v6 ~
  135. }
    . o) W7 _2 `4 @5 S1 j6 Z
  136. 1 o- B4 R8 \/ F! o: u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    * @1 X+ j" ~+ M- [+ J4 h4 G' d9 K1 ~
  138. {
    - u" y. s: H* U6 S1 x
  139.   TCHAR  szFull[MAX_PATH];
    9 O/ f& o) k9 z& e
  140.   TCHAR *token,*inter;
    / O% M0 [8 f% D& L$ o' \7 o
  141.   *szPath=0;
    2 q& P4 y0 z, |4 J
  142.   strcpy(szFull,szFullPath);
    " ~/ Z. z. k/ J! B
  143.   token=strtok(szFull,"\\/");
    # r' V% |: T4 d/ V; C
  144.   inter=token;
    # K, A/ P. M# j$ r. m2 _9 `
  145.   while(token=strtok(NULL,"\\/"))
    / j+ ^3 w* l: n
  146.   {
    . J3 \& U+ M: x
  147.     strcat(szPath,inter);
    , b% D; Z8 D& p3 u7 O  e
  148.     strcat(szPath,"\");) {6 s, ^1 d; Y5 a8 g: }
  149.     inter=token;1 V7 v2 o  d1 c: y( y7 }8 H8 I
  150.   }- d- t0 }* w; s
  151.   return strlen(szPath);5 ^: c1 e: F% W+ X0 j% T: C
  152. }
    0 u/ j$ h; _; k4 K# @, Z

  153. . V# J# B" D( l( R
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% N7 f8 x, q9 n% I7 o- q8 C
  155. {, O, d' M* w, t: c
  156.   DWORD attrib=GetFileAttributes(Target);  c* V8 T* S1 E" |5 T: A
  157.   if(attrib!=-1)5 m( k' |' M; s, E3 y
  158.   {
    2 X4 C- Q! h! R- U9 t/ g5 T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & V* k. I5 d( {6 n: g
  160.     {7 ^+ S! R2 ^7 `5 |! @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);+ w4 \, w6 c; S5 w/ X5 ?
  162.       SetFileAttributes(Target,attrib);4 z0 Q7 ^0 _/ n! e9 E* B5 t( p* Q
  163.     }2 u3 A! s7 I) j! [, Z% L
  164.   }
    # G2 C  x7 K6 L4 B7 ~
  165.   CopyFile(Source,Target,Erase);
    & V4 o5 Y1 u& b- W- m: P/ x
  166. }
    ' |' n! u/ }+ b5 }/ g6 ]

  167. # w& J+ N; _0 o1 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' _6 S! X" Y" ^7 E
  169. {
    2 X; J1 M4 K) e2 w7 A" ^6 Y
  170.      FILE *fp;
    , t  k* j% p" @& E% K5 O, O0 k% Y
  171.      char  szBuffer[8192];
      I# u1 f& U: O
  172.   va_list  argptr;- W' k" P+ [8 A; ]; y7 r3 Q& |
  173. & ~! V) G! u: J# l6 m
  174.         va_start(argptr,message);2 v. r: o5 L" J# r7 F
  175.         vsprintf(szBuffer,message,argptr);  A# u5 V9 ]/ @9 {
  176.         va_end(argptr);
    6 W+ c' E8 u) I
  177.   fp=fopen(FileName,"a");
    ) {  W. V. @  x
  178.   if(fp)
      e* R1 g4 A+ |/ \- }9 s9 Q
  179.   {
    - ^5 D3 b- u7 }- `( i
  180.     fprintf(fp,szBuffer);
    & c0 }* i* t# x' Z
  181.     fclose(fp);# ]( n9 j! p$ h$ e
  182.           _flushall();
    7 V3 g7 {' o7 T! j* ^
  183.   }
    . v! Y$ n( M) D, Y( o- U! C
  184. }
    ( J$ p! M7 Y9 t- a* V& M( v- h

  185. - B5 f0 F( A/ [2 o  |9 [. L
  186. BOOL CRevAppApp::Fclearf(char *FileName); J- @  L) b4 P2 t$ D+ a
  187. {; {$ r+ K7 T$ K7 G5 `
  188.      FILE *fp;8 l5 p; i1 y" v- q# F5 |
  189.     DWORD  attrib;% x# S) ?7 F9 G  j( e- O
  190.   attrib=GetFileAttributes(FileName);
    7 D6 \7 `# C2 U8 ^
  191.   if(attrib!=-1)- k3 v/ @# q6 w0 l- f& G
  192.   {' I+ {( P- y7 l5 I, ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  C2 O6 Q# E, d: w
  194.     if(!SetFileAttributes(FileName,attrib))  E  r9 Y/ x" D/ I6 H8 ^
  195.     {8 A* p6 R2 P' h* U" ~  s
  196.       return FALSE;
    8 v; k3 M" A2 @' ]; c+ h: Z1 [
  197.     }$ C  L  U( d; w
  198.   }
    ' ~5 [$ C2 B. `3 S
  199.   fp=fopen(FileName,"wb");
    ; ^5 u$ N( k. n1 B0 c' L- G" \
  200.   if(fp)' V$ E* b$ p( g6 L9 \2 k  f
  201.   {
    : l5 M; P8 I0 _' N1 B0 e/ |% B/ E
  202.     fclose(fp);
    . }: V) `: N- C2 `+ g
  203.   }; K8 g" S* I: Q" [+ c0 `) D( [
  204.   return TRUE;
    2 G* P% F) T3 W  D$ b4 o
  205. }
    4 a% V! I% Q- u4 N
  206. - p+ R" Q) s6 ]; Y+ z6 I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 B1 F* S' w' \, \( w
  208. {
    . A; ^1 T. G5 z; F2 T7 t: z+ p
  209.   char filename[MAX_PATH];
    3 L3 C9 c0 h: }# P2 O2 a% o5 I- ~" P
  210.   LPUPDATEFILE file,olds;* n5 I& e, I5 D' t
  211.   std::map<int,CString>::iterator i;: X* O: p  c( E) v9 U2 e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;$ u9 K' |5 K' A" A
  213.   std::list<CString>::iterator l;8 D3 T" x& Z& m/ \. |

  214. 5 s9 ]2 N( C1 r) P6 j. e) h
  215.   if(bFirstUpdate)9 R/ C7 T' f+ u- C8 D  R- E% @
  216.   {
    " h& E6 n& z. v/ y! d7 V6 t# k
  217.     dwCurrFile=0;9 M3 Z9 I1 B/ t; Z2 O
  218.     bFirstUpdate=FALSE;! x6 Y, J- f9 ]) z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 @$ J+ c, |( K* W3 H3 X* e
  220.     {3 b* E' u( X5 h: j1 J" f# @; i, P1 n
  221.       dwTotalFiles=UpdateLocal.size();6 d1 S3 _$ {- @9 H1 Y+ l; H9 \
  222.       dwDownLoaded=0;8 F7 g) E  s2 O" t$ H
  223.       bSilentStep=FALSE;# s4 q- [, o3 I( U9 U: c3 A: K
  224.       bCompressed=TRUE;
    7 X$ |0 c+ L4 L$ x0 y4 u! }. A
  225.       strExtLocal.Empty();
    8 ]4 {6 [/ Q5 i( p! N: W
  226.       strFullName=(*i).second;+ J% m% k  N  P  {5 `
  227.       dwProgramState=AP_CONNECT;
    4 |- H! D. J5 X$ ]7 P% m
  228.       return TRUE;& }2 V# S; `1 \3 P& V: h
  229.     }
    * }% m$ M  [/ {
  230.   }
    5 [1 C% B- u3 x" N& N9 h
  231.   else if(bRestartUpdater==FALSE)
    5 G( W8 E: x  B# F& g
  232.   {  H/ n; Q( B7 I  Q; q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      F+ l1 X2 K5 D" T. j- h
  234.     {
    # o9 {7 m4 v$ @3 d7 E
  235.       file=(*p).second;+ z4 u+ T6 v; r9 f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + @4 u- F0 `4 X# J$ n+ Z
  237.       {
    2 w6 @2 e2 v& i+ b0 [
  238.         olds=(*p).second;8 v* s. p$ w6 f/ `
  239.         olds->vers=file->vers;& ]/ q' l8 A' k/ i' Q$ E
  240.       }
    7 R  v2 f. f- q4 O* ^
  241.       else
    0 F7 D3 ^: t6 t5 u6 }6 `, i
  242.       {$ r4 i7 x: Y( j# ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . S1 E) \! O4 s0 W6 B. r. U+ b: M2 `
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      n2 w6 T. y. h" F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . y: Q7 u7 o9 \5 r/ v9 N" s! h
  246.       }
    1 D& x: {! d  n, i* K: K
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    + V( O: Z/ w8 X' R* c+ g7 U  f
  248.       sprintf(filename,"(%s)",file->file);- Q/ p3 j# c, R+ V8 j: i& @: b4 V1 ^
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 v; }7 O& L" g" X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% [6 D. O: b( K! }0 E
  251.     }, r; @" R0 [) {" h& }4 t- E
  252.     dwCurrFile++;7 k7 ^  g) B5 v7 F" P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 h! {2 l; Y, j( R% ^4 U. C
  254.     {
    ' i# u  j  q  y9 x7 A
  255.       bSilentStep=FALSE;
    9 v, }/ _6 G9 I" v  r: q
  256.       bCompressed=TRUE;, l9 I0 M) G3 ]0 I; q
  257.       strExtLocal.Empty();) `; k- x" m; i: P: @% Q+ o, O4 t% u
  258.       strFullName=(*i).second;/ [0 Z) g# X% d, Z0 j9 R
  259.       dwProgramState=AP_CONNECT;
    6 o4 }9 e/ Q- n5 v- S4 z
  260.       return TRUE;4 Q0 X% D+ x: n0 L
  261.     }
    & g% ?1 S, q/ _- b; C
  262.     if(!bRestartUpdater)
    # _. C' w$ c- t
  263.     {
    # f9 A1 [7 N' _; e4 L# ^
  264.       int iCurrSize,iFileSize;. S9 s' q" s+ _" {- _2 R+ G
  265.       iCurrSize=0;0 o8 @6 P* Y2 K" K/ t
  266.       iFileSize=UpdateList2.size();/ M0 ~9 b3 y  p0 w$ e. \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 d  f" T0 n. h) [% b6 B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" E. P. p1 p! t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ L  m  u( n# V# O5 y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! k6 u7 T: z& w5 ^9 l1 I" u+ @
  271.       Fclearf(".\\update.dat");
    ) r) T# U# i  m1 L
  272.       Fprintf(".\\update.dat","Bloodyf\n");! s3 B& T, o, i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / }+ h( l- l" p- a  v4 p6 J8 t
  274.       {% D  |; p; A2 ?8 s) h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 v8 ?3 p6 }0 E
  276.         {% H. b8 N4 i3 R: o
  277.           file=(*p).second;# I$ F; J# j: g& h& \" {$ f8 G* j
  278.           sprintf(filename,"(%s)",file->file);5 H2 \6 N: o. `( Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * J" J- ?, |' [' Z6 y
  280.           iCurrSize++;
    . ~. r( N3 A- [5 g" L# C9 s8 c8 X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * K9 f9 x( j: j' x' F
  282.         }
    % @" x3 I, Y' D7 l
  283.       }
    ) f# j/ q4 k5 I' A( a! B
  284.       unlink(".\\update.txt");" k/ a' e# Z( N* a- m. B
  285.       unlink(".\\update.tmp");
    % q! Y. f3 ]7 r( a4 t. O
  286.       Fclearf(".\\checkversion.dat");/ B* g3 Z0 c7 ~, @6 ]+ D& V( Y* ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( P: z" z3 [. z; d
  288.       if(UpdateLocal.size())* H& J! h. i( V/ g0 l
  289.       {
    " G. ~& q- c$ @! ^% C
  290.         UpdateLocal.clear();
    2 x% i; Z  V* R+ m
  291.       }3 [; |( S5 `1 L- ^0 |
  292.       if(UpdateFile3.size())
    + ]0 _3 D! f8 O& a& D% b! S- p
  293.       {8 Q. f& u$ |2 ]) b- [8 G3 y! U8 b2 ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 B9 s% Q" o! m8 `1 P# }( b5 Y: i
  295.         {. j, n! c0 U- Y+ w* N" U5 `6 J
  296.           file=(*p).second;
    ; u$ N( F& n+ k/ a4 V$ D
  297.           free(file);
      Y/ j" A) n( a* ~: `
  298.         }
    ; W) n" G0 H+ q" f6 P! ]
  299.         UpdateFile3.clear();
    * o8 ]4 z; ]$ r; {/ y# U  q
  300.         UpdateList3.clear();
    ) u2 K7 G9 `/ u8 _* T! C
  301.       }
    - |4 D5 k8 }% V$ a$ _
  302.       if(UpdateFile2.size())* k. _$ Q% Z9 ^7 l5 r* d& B9 D. a
  303.       {
    * }' C) \; x+ y9 D, X3 a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 R$ Z6 Y2 J  I1 ^/ ?6 g
  305.         {
    ( [% R+ n! \. ~: o2 ~
  306.           file=(*p).second;, i8 k8 N; d- S: O6 `
  307.           free(file);! K- V$ d' i  N8 b# e/ h: E; F
  308.         }
    ; H- r" N8 v1 Y: w) h1 e5 j5 s
  309.         UpdateFile2.clear();( q* Z2 U2 O) V7 b4 T
  310.         UpdateList2.clear();
    3 |+ W9 X# ]! W8 x' m8 c" j
  311.       }# \- t) A& j" h% w
  312.       if(UpdateFile1.size())
    4 M$ V9 G* S/ ]
  313.       {
    ' z6 Y1 V6 N: H, O; S3 h7 i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  j; O! q+ \7 P' N
  315.         {% G8 `5 {( o. |, g" `0 c& |
  316.           file=(*p).second;
    * T  L& n' F) Y: I; M
  317.           free(file);7 [  o2 g- L) r" Z7 u
  318.         }' ^; f  }" E; `1 _$ H
  319.         UpdateFile1.clear();3 p0 `: L2 Q6 U$ z( ?
  320.         UpdateList1.clear();
    8 ?7 ~: p/ \% U
  321.       }
    + T3 ]( i* F1 D5 {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : A$ `; q1 C. Z) e
  323.     }$ s% d. g& J/ \& ~% }& h
  324.   }3 p9 ~7 K) k; a; H
  325.   return FALSE;
    ) L  i+ K# S) F2 {2 f- k, ~
  326. }# ]# }- N+ E0 I6 a1 ~  k4 Q1 W# n3 x

  327. * l# `' c" [4 {3 H' _! D5 `* s( a
  328. void CRevAppApp::ClearAll(void)9 T1 F6 h% _  I+ ^; ~
  329. {% g9 P  p% O( e+ ^% y$ n, Z
  330.   LPUPDATEFILE file;4 r$ o. N2 F+ T6 P  n0 w$ Y( r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! v, ]* [$ e8 `" s1 f& h' S$ w

  332. 1 m0 |" [( J" }/ o3 F* ?
  333.   if(UpdateLocal.size())  i$ f" r! {) e6 |$ `/ B% \% Q
  334.   {
    * b  F1 y% _3 y' m) T* W& }
  335.     UpdateLocal.clear();
    % P- t- o4 A- F
  336.   }
    * w' ]& E! n6 e8 M
  337.   if(UpdateFile3.size())6 y+ s" M/ J* y8 T, A% D
  338.   {
    - O% M: [8 k2 w0 N/ {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ L, M! G! ?2 B- O5 q
  340.     {: k0 Q& a3 a8 n: S% W; ^- K, g
  341.       file=(*p).second;
    - ^: ]' r8 A! C+ t. p( f5 {5 l5 d
  342.       free(file);
    # D" t; V% T, l1 @3 s9 {( g& Z
  343.     }8 u5 W- w- `5 w7 v' H, E
  344.     UpdateFile3.clear();& `" K6 v0 V* Q/ U, L3 \7 l
  345.     UpdateList3.clear();$ T& I5 u3 u4 Y+ s: k/ o/ e- s* O
  346.   }* b' p" l  p: C/ H- L) \% v2 b
  347.   if(UpdateFile2.size())
    0 u2 t0 `$ I; ?$ F
  348.   {  i# w0 n5 B; a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 y# ?! I! c7 O  v9 \+ K
  350.     {
    + e. L& a1 J3 D
  351.       file=(*p).second;
    / V" I4 f6 a1 I: T  c  C( _: u
  352.       free(file);
    . m* @& n8 i2 D: v
  353.     }
    2 P: y4 K3 A" t- i3 X; O3 w
  354.     UpdateFile2.clear();
    / K* W: U- h, W$ l9 p
  355.     UpdateList2.clear();) o/ k4 R8 h( y
  356.   }: m  k0 {3 t/ E. S
  357.   if(UpdateFile1.size())) t6 @% @0 a2 L& i, N
  358.   {& r% }- I, T, E0 P8 J% v9 ~; J
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 ~% ]7 K+ W) b
  360.     {
    6 Z3 H( W3 z$ [3 P- z+ k5 _
  361.       file=(*p).second;  A/ z0 \, D& Q! R4 I' m$ _
  362.       free(file);
    8 @$ M( p' F  X0 ]
  363.     }$ k  E) ?1 b. U) K+ Q
  364.     UpdateFile1.clear();  T7 F) X9 C4 a  \
  365.     UpdateList1.clear();
    - ^4 S; i0 n" y0 o. N' H; ~. Z
  366.   }
    1 W3 i. e) H2 B- _
  367. }  9 E2 @& u0 G: p4 s  X7 j8 T
  368.   
    ' H' o# x( x9 V+ K) c
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 O* i! g, v8 g6 y# O8 `+ T
  370. {
    + w* n4 e# ^' ^! @- y
  371.   int c;
    . f" X% O; ^: g2 O; d
  372.   LPUPDATEFILE file1,file2;
    ! c6 \( w* X7 Y' ?" O$ Q4 O' L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 v( n' G$ |6 E* d8 w
  374.   std::list<CString>::iterator l;
    + ?  f% V' I3 ?+ D
  375. 9 H# }! U  s  |' V- L( {: j8 a
  376.   UpdateLocal.clear();
    ( o. l' a" y) l. \8 ]6 B3 \* R
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    3 X& y7 r% x- X' I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * Q3 A" e, `& m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 C# R3 i. q2 A! X
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + p! z6 H( \  _4 E* {
  381.   if(UpdateFile3.size())
    / K5 C+ g, m: |' H, S. Q& `
  382.   {
    9 K+ T1 _* O2 b" l% B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ Y" }* x9 k9 `; W+ ~% M
  384.     {
    , V9 _9 J; G7 C0 D* R/ _5 r$ Y
  385.       file2=(LPUPDATEFILE)(*i).second;5 q* e- J# D' t1 d0 s' ~+ C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% h8 F" Y) y# D3 Z) R  \+ V0 N
  387.       {
    * r. g, _2 v6 X* g& J5 c( _* g3 u; x
  388.         file1=(LPUPDATEFILE)(*p).second;
    + q2 d- y5 R7 x+ {6 R) @
  389.         file1->vers=file2->vers;" t; s8 k$ V- y+ Z* R3 Y2 ^" J( w) w
  390.       }
    3 d" p- A0 k, N6 u/ X7 n
  391.       else; |! h" s7 `3 J0 x$ |
  392.       {1 h/ a  e& h/ G( P; m; d# S
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! R/ k2 z/ ]- P8 U8 k/ M6 _, p, A: t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 \* M" ^2 }1 T/ s0 `1 C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 a: A0 v+ l  O" {) Z. F
  396.       }
    ' c# ?5 _, k" R
  397.     }
    * `! {) S8 F  h/ w+ @. i( a
  398.   }
    ' S5 Y% M9 E- d4 o* P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 g) v1 |. r* o7 g9 j6 J
  400.   {9 f& U6 y; Q( t# [8 D% w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 J% I- A7 M+ `6 S: E3 C5 [
  402.     {* F/ \& n' Y% E8 P/ h
  403.       file2=(LPUPDATEFILE)(*i).second;* K% o9 }+ J5 u
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). f8 i- X! N) i& b2 M8 u/ x
  405.       {. y( H% s; X6 I  _8 k8 K  J: z
  406.         file1=(LPUPDATEFILE)(*p).second;6 Z  X( O# K4 v# Q4 h7 x) j
  407.         if(file1->vers!=file2->vers)
    $ ^8 C4 a. o; p$ ]6 Q8 X
  408.         {
    ' ?" v- X5 I3 Y) Y6 J+ C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      P# k. o- k2 M" V( R: t
  410.           c++;4 D/ @8 _3 [. a' V* I3 z& Y
  411.         }
    ! L( i2 |( x6 N; P
  412.       }
    ' {  _) P: U4 X
  413.       else/ I$ p* r  e1 h* k! F* K
  414.       {  g0 N' f0 ~  y$ g1 E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* c! z  Q, x5 ~7 K8 `
  416.         c++;
    : b  ~4 B1 ?2 M' E0 F) B
  417.       }
    & ^5 l) C1 O% I& }+ O
  418.     }, n: w' }# ]. l: A
  419.   }
    8 d$ u2 q! Y* o
  420.   unlink(".\\DownLoad\\update.txt");2 A. P. T9 A3 S) V; j  r% n5 m
  421.   if(UpdateLocal.size()) return TRUE;
    3 R+ h' N6 Z' P( N3 L$ s
  422.   else                   return FALSE;
    * S9 Z2 j: f) X8 K  z0 q
  423. }$ m0 U6 w* ]" R! V6 C% v

  424. 7 I/ `- e; B0 I8 I. o0 E6 F% W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/": X9 @9 ~# \" o6 ^
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / t& `. e# q& c1 C- }

  427. ' m1 ^$ J( S; k4 p! ^7 P
  428. 7 i! Q8 @" w& @* s

  429. ! l, w5 W# w' `; ]& ?2 R7 a( [$ c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" c0 z8 i8 S$ S5 U' y$ C3 G
  431. {. W7 u6 m8 z0 s3 u+ L1 e, k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    + v1 s' w* }& {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( O4 L2 |! Z* I$ w: c7 @3 N! P8 G
  434.   {9 S  U! o% e3 ^0 p
  435.     char szLanguage[50];( G; S( W& m+ h5 [3 k4 F0 k# e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% l1 m* k6 {' X, N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " x) b3 g2 {0 x) k0 X% ~8 v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , j* f0 Y% x6 b; q7 G+ Q* V
  439.     else                                   m_iLanguage=ENGLISH;5 F& C$ G- S, U- L2 @5 g, ]" T
  440.     char szRegister[100];- m" O& [& K0 x; A6 @7 I: }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 A% H; Q: `/ `# w
  442.     strRegsName=szRegister;( t/ A4 E) B) C
  443.     char szPatchURL[100];
      [4 L3 v; C# Z" }, J* Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - h; K0 ]( u' t, w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! K9 m( f. }  V) n0 z: e
  446.   }
    1 ?3 r0 Y6 t- V1 j. I2 e
  447.   else
    # c' s" \. B& x$ L
  448.   {
    / {. ]( v2 i2 d9 B+ v1 I& O& V( ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; Q- s! L& b3 B( O' t+ @  h# a
  450.     strRegsName=DEFAULT_REG_URL;
    " j/ z4 W$ o+ ^0 @
  451.   }
    5 Y/ {  Q% K+ L* ?) c+ Y. j& i
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 q# Q2 O4 t5 E" A
  453.   {
    7 S! b! V6 y) q% P2 B: ?
  454.     char szIP[50];
    " U  V2 c) s; `7 O# w# E8 R" \! q8 ~
  455.     char szDIR[300];$ }" L% d1 `9 u/ o6 D1 U$ W+ D9 B: D
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 Q) A; j+ E4 c( y# {
  457.     {
    - b$ s& |/ s# ]5 w/ ~3 n" D( D
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; w. l1 t9 X0 g4 U+ w& y( I
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  [5 |  W2 ^! T- w0 w
  460.       strHostName=szIP;3 w# s6 m$ x) |! c
  461.       strHostPath.Format("/%s",szDIR);5 r( K! ?+ g7 |/ d. W/ P+ k
  462.     }
    - g7 r4 r& y8 O
  463.     else" R# {: f+ |% X6 ]& X4 x" _2 d0 h
  464.     {
    0 ~* Z) I( _" K( Q& H- M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' O6 K, [9 p# Z# {0 E' }4 I4 @$ C
  466.       {) q5 F( K! S  D" E' `1 t
  467.         char szLanguage[50];0 A/ x0 ]# H$ \
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, T# b$ l1 c& p- T2 V
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / A6 V8 i, _! A- A" t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 E9 r% X4 ?& @
  471.         else                                   m_iLanguage=ENGLISH;
    & O" b& E2 h: }9 K: g& l
  472.         char szRegister[100];
    ' k' L7 Y+ B3 j4 {  l5 {% D0 f. H; M
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; \4 [4 ]0 Z) R3 J( p6 @
  474.         strRegsName=szRegister;, E% {, e0 Z3 l& E- a
  475.         char szPatchURL[100];" o& N- I- P; i" D) z. K+ K
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & |/ x  _% U0 Y* ^+ Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' ^6 b. J0 S# y1 k5 ?5 Z
  478.       }' W* Y2 p* U. q- J- K. n# d7 v5 g  W
  479.       else
    " a7 w9 n6 M# s% p& L2 |
  480.       {
    % y% E: i' M  Z/ l& M( D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " ~# u9 Z: B1 \' i
  482.         strRegsName=DEFAULT_REG_URL;. v. c+ L# B; R: f( Q: M5 R! v/ y- Y
  483.       }
    7 g$ z8 Q: r" W1 P' W7 a
  484.     }; i1 t9 L* B& m: j9 D
  485.   }$ b# G' W% U: X  v4 \% d/ Z/ u( m, ]
  486.   return true;
    ( \5 B) \/ }# E) Q# |
  487. }
    8 I6 t/ H1 Q, D2 t, I6 H
  488. 7 Y1 Z2 f+ r6 Z+ i, \
  489. #include ".\ZLib\unzip.h"
    3 |1 Q. P* y; l% l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * z% ]" K+ G# C# p
  491. /////////////////////////////////////////////////////////////////////////////
    ; t% z' S6 n6 n0 `: ?9 P
  492. // CRevAppApp initialization1 \6 M2 p" k0 W& G# A$ u7 g

  493. ! L! t+ _, }/ y
  494. BOOL CRevAppApp::InitInstance()
    $ @* R; S* n) S' n! B+ R; }
  495. {
    2 S: {+ \. s( p6 x! i8 O
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 i' i( y- R8 p6 z# h7 }! z3 M3 }* U2 [
  497. 8 p! T- h; T0 _- |- o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # i, x" @! Y1 r6 n* o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 K" [* u. _; T: r1 n7 n
  500.   {9 Q( Q3 Q0 T9 f* I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    & o: P6 O9 ^' Q/ s( _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * v! Z$ R- F: Y- v) S2 w  B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    2 D, l/ N5 H6 g1 l; S' o
  504.     {3 ^6 w6 |" C8 ?1 K5 S$ i
  505.       strcpy(szPath,szPathTarget);6 w; @2 Y& A4 _" g2 [8 q, t6 J4 J
  506.       SetCurrentDirectory(szPath);
    ) q# F; J* R' g( U' _+ X" Z
  507.     }
    . B, r- a6 ?# B! W5 a! m
  508.   }( v4 |" n; d8 E/ x% p! C8 H
  509. #ifdef _DEBUG* s' F+ U) N) m( D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% o0 K, D! p# ^6 w* w  e9 T
  511. #else' |) ]. Y! p5 r6 f1 q% Y1 R1 [1 E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 I7 F; V$ P; V6 u
  513. #endif
    + C: P0 E" h0 P) D+ k( U
  514.   {4 ~0 s$ R  W9 \" ]- U5 H" y
  515.     char tempFileName[MAX_PATH];. q4 O" N6 q- ^" R7 g
  516.     strcpy(tempFileName,szPathSource);8 j2 K5 {2 G( o  h
  517.     tempFileName[strlen(szPathSource)-12]=0;
    4 @  W- {$ q: ~' ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    7 X, M2 d! Y! v" R& `6 V( v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( X4 d$ Z  E  Q9 {) V3 |& Z8 ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ F' n0 }% _" M; d. Z: m1 f8 N6 g+ i" `
  521.     return TRUE;
    ( m1 v' K# Q% r) n4 i3 R+ C' w
  522.   }7 c7 @- X2 c2 @1 W! E1 b
  523.   // Nuke 0118: Delete run.exe
    $ p# m  s2 B- P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 \1 x. d9 X) Q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* s2 S  R6 [! \
  526.   if(!ReadCfgFile("Config.ini")): X8 L* l7 u' X% y9 s6 Z
  527.   {
    5 q& y' j! s3 R& q8 K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ A" @/ K' F- \/ W  x7 P
  529.     return TRUE;% ?6 L" Q, u0 t) {% d! }; s4 o; r  O
  530.   }
    4 D& Z) A/ ?0 z; ?' r0 D' t
  531.   HANDLE mutex;3 ~' F$ K3 M$ f2 @1 F* B# f# I1 S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), C/ Z( P/ u& j8 D! E
  533.   {! U3 A1 _8 s% X" z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 t5 O  f7 }) f( x& W" o5 r
  535.     {
    + s* G. N/ I8 K; }
  536.       CloseHandle(mutex);
    + d& f& @$ j- k( [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " ^2 j8 c8 e0 b1 ~
  538.       return TRUE;& y$ l4 x  @+ V/ C; n
  539.     }
    ) a, u7 ^/ k: p& V4 j
  540.   }  
    $ @( V" @# x3 V: d: f
  541.   CloseHandle(mutex);
    3 i1 D. F1 z- U( w0 G
  542. " _" G& m9 x1 l. R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : k! [" [' i0 Y* m. s0 S

  544. ! H5 p# n# }' J* I; _" Z$ [4 I
  545.         AfxEnableControlContainer();
    4 K5 k0 p' p+ m& Z

  546. ! `, r/ j6 T$ f
  547.   bCanUpdate=FALSE;% }% M6 D4 O2 R4 R1 r4 |
  548.   dwStartUpSteps=1;
    " @$ w7 C( V+ I* o0 h
  549.   dwProgramState=AP_NOTHING;
      t- M- e3 h+ @: H- i" m

  550. 5 X, @0 \+ [3 G5 E+ W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 x3 K0 D4 H+ f) g

  552. + y! O9 |# Q4 W& M( [/ e
  553.         // Standard initialization! K+ ?+ R$ l5 O6 K0 S" P
  554.         // If you are not using these features and wish to reduce the size* m0 m$ n" l" G/ |/ U5 \7 O& P+ i
  555.         //  of your final executable, you should remove from the following2 t: u, S$ x2 V9 w
  556.         //  the specific initialization routines you do not need.1 s9 ]  \8 L) P9 N6 p/ \6 e$ V7 A
  557. ) D5 M# O+ y, y& H, L6 t: {7 [
  558. #ifdef _AFXDLL5 S. D- H: s% |! {$ \
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 _7 l0 k7 b2 {6 {9 k0 h& z# i
  560. #else3 u) p# {/ t. u+ F) X& d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 O6 u8 \5 m! x9 g; o
  562. #endif
    * i8 l- v$ i' A0 N# P: B

  563. : q5 F* a+ |6 X
  564.   dlg=new CRevAppDlg;
    - {7 R. j3 r; _
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / r3 B* F' @2 W* |9 u1 d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) d) o: h/ P, |, C) g
  567.   m_pMainWnd=dlg;
    5 ?! I& U0 x' g7 s0 W. D
  568. " I  g- z7 q+ \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ D! B( i* m$ W5 `9 a- l5 f5 [
  570. 2 A  L/ ?; A" f; l; _& w
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 e7 p4 y7 X, q
  572. //  ULONG_PTR gdiplusToken;  v. E" f+ v0 @' m3 r1 a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . ]. q9 P+ z- d  y1 T

  574. / I6 }$ [/ x- h* w) [
  575. //        CRevAppDlg dlg;1 w1 M: Q/ P+ K- |1 V  r' @
  576. //        int nResponse = dlg.DoModal();
    . Y7 m: G: ^6 ]/ A) K9 i, A1 I1 f
  577. //        if (nResponse == IDOK)/ C8 Y9 A: K& I
  578. //        {
    ; B# l! u6 f7 a6 M
  579. //                // TODO: Place code here to handle when the dialog is
    / I9 X+ p, B2 W
  580. //                //  dismissed with OK9 ?. v2 l7 h$ v' J
  581. //        }
    + ~! n/ ^' q& G* f
  582. //        else if (nResponse == IDCANCEL)5 u- G- K7 p" Q2 o" H
  583. //        {
    9 N. B- @& u( n. @9 E. S
  584. //                // TODO: Place code here to handle when the dialog is
    8 U2 h! b9 F" r. a
  585. //                //  dismissed with Cancel
    ! a8 U( N7 f/ K) V8 h
  586. //        }
    & {+ \1 Q/ Q9 x2 T5 F" [; y5 Q: G
  587. 7 k, `; E* B2 L/ r
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ M( a9 }# m! A. t, Q& I- |
  589.         //  application, rather than start the application's message pump.
    0 O" n, q8 @$ R& l6 C4 i" [# j" Y
  590.         return TRUE;
    0 T' o: w3 m- s8 R
  591. }: H  n0 W. ], m# ^( N
  592. 7 p: J( n! U6 K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 y$ A; {. [' ?
  594. {
    * k1 E: h) k: P3 q0 x* I
  595.   int i;
    " b# ?: t9 q5 M+ q2 X
  596.   char *szRet;3 Q2 P7 A8 a7 l, a  X; a

  597. , ?" o' B# d) V' I$ c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ! V5 s1 n( X" t) ^8 x  B
  599.   if(sztoken), b% E& `5 B, {! T- L9 O1 d4 E1 ^
  600.   {
    " P1 F# R8 G1 f/ b8 Q0 }: F
  601.     szRet=&sztoken[itoken];
    5 k2 A8 [1 s7 Q
  602.     while(sztoken[itoken])
    / D* `- F" }/ G0 E5 R# A7 [- M6 V
  603.     {3 R& ^4 i1 a+ H0 z: f( a) l7 H) ?
  604.       for(i=0;i<(int)strlen(token);i++)
    / R1 j+ g. l- f
  605.       {
    # q4 [; Z! f1 w4 O6 g* y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): _* t. u+ k2 i5 j
  607.         {
    ) B0 @/ ~) \, W" j4 f+ P
  608.           sztoken[itoken++]=0;( M9 n" h& u0 E4 x1 m2 H
  609.           sztoken[itoken++]=0;0 ^) N% x4 ?( Y* U
  610.           return szRet;
    ( B. H( T; {& r% w3 G9 u
  611.         }
    3 O+ W2 I; k: O
  612.       }
    ! X5 Z( ^5 x; ]
  613.       itoken++;8 {6 b6 o+ ^( U' p% [
  614.     }6 R$ w# u1 L& g6 ?
  615.   }8 k* Q" t( D2 E/ R7 _  t
  616.   return NULL;" J$ \$ T! d8 e
  617. }
    3 Y; l8 }5 ^+ ]0 w8 s
  618. 2 R; R. k: `  a5 Y5 s, U# R; U& B
  619. void ProcessProc(long Total,long Current)+ D! S( M2 L) Z  @9 Z$ H
  620. {' w) {; W. d% \6 x
  621.         MSG msg;
    0 X7 c% T8 S3 _7 I0 D$ n5 _' t8 ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; M5 U- F: v& Q: I7 v
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 q0 _& ]; g4 c' O7 w
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))# t! p1 ~% a9 ~
  625.         {
    2 v6 f- ?. |; L* _* q- b& }
  626.                 if(!GetMessage(&msg,NULL,0,0))+ h/ |% Z) X/ A/ L3 f; Q
  627.                 {
    0 j1 J  s* B/ e6 _
  628.                         return;
    6 @3 M# T7 g; k' Q
  629.                 }
    2 ?* Q7 H- O  v6 j5 i5 Q5 ?
  630.                 TranslateMessage(&msg);: _: A# y/ n, K7 W, Z( A* {* r8 i6 Z6 Z
  631.                 DispatchMessage(&msg);1 I& @1 y9 r8 s
  632.         }        5 Q$ U9 C1 m* \8 ~
  633. }
    ) w! M0 u3 L0 K5 o
  634. + m" ~5 p+ M# ?/ P
  635. BOOL bFirstChar=TRUE;# T2 j4 u7 h) q/ y" A; S8 T) C
  636. # A  n6 Y9 b/ T! h; c) k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" |5 r9 T. B$ C$ D0 G9 y
  638. {/ U# A* u. O3 H9 X0 u) T5 q% s, [7 \
  639.         // TODO: Add your specialized code here and/or call the base class
    8 ^) c8 [; Q6 T) a: j  w
  640.   switch(dwProgramState). [! b9 e% z9 W5 v: B; o
  641.   {  Q5 f- n8 U; P8 H' F" x0 I8 ]
  642.   case AP_NOTHING:8 M* x' }1 Y' x( B$ `6 E
  643.     switch(dwStartUpSteps)1 Z; N: ^+ Q8 U8 H- i6 h
  644.     {
    5 f7 `( ?9 ^! C
  645.     case 1:: @% e& r8 g' I7 K( v5 T6 `
  646.       {
    2 q- r7 H7 p0 B% ]1 a" g6 q% h
  647.         int i;9 m' c* L" G* c! W, J8 K2 P& z$ @
  648.         CDC *pCDC=dlg->GetDC();% b4 A) F5 p# w0 a
  649.         HDC hdcwnd=pCDC->m_hDC;$ p! T9 ?; {; i
  650. //        Graphics graphics(hdcwnd);
    # Y( k( r" I. G, ^; W2 h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ q! r% h- b4 i* ^
  652. //        INT iWidth=bitmap.GetWidth();
    $ F0 N; t/ p  v% \- W( m" l
  653. //        INT iHeight=bitmap.GetHeight();
    / p' i3 A+ y5 W  D) h
  654. //        Color color,colorTemp;
    7 m: z* x3 B* ~4 T# Q5 e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 c) E( R! @4 |; |' u9 r" p
  656. //        {/ k4 Y% Z- j! v/ H. a/ G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 T7 d- p; w3 y  x
  658. //          {4 \0 S9 L0 c0 K. g/ V/ p( x6 x( |( \3 d
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    / H  T8 f! U3 T5 _' E
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 A2 t0 d9 S/ a! `0 w5 I
  661. //              (BYTE)(255*iColumn/iWidth),
    , N! N7 h) c  H' m4 y7 G
  662. //              color.GetRed(),
    : P: A$ s% e) u& f- I5 P
  663. //              color.GetGreen(),
    & b5 c8 D6 d( |8 D
  664. //              color.GetBlue()));
    : {: B- L0 @( \8 |3 r. i4 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' A7 \, J* h% H5 s+ X- r1 [( m, l) k
  666. //          }% U  ?3 L2 W! g# Y+ Z* _4 i- Z# `
  667. //        }
    # s" T9 A% w4 C6 T
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . @% v1 R2 N/ o
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 l* w+ V- r$ N0 }5 t2 E
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) z$ K: G1 [9 f5 m6 J) S- b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" q4 f9 E6 a2 N/ t0 y
  672.         for(i=0;i<240;i+=8)
    ( ?% A/ {9 L' X
  673.         {
    . Q$ h+ O0 e, g$ I0 K! f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 q6 c$ ]! L  K+ D
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: D8 f; ~  ]/ R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 W% B9 B; R/ p' ^% h* x
  677.           Sleep(33);5 B8 K0 O, B& I
  678.         }8 L' Y% j1 |; |/ A$ ]3 t0 R" {' B
  679.         Sleep(1000);
    % j/ {" k$ S0 d/ x
  680.         for(i=240;i>0;i-=8)& X+ v( Z4 f9 W1 v) o+ s/ v# v# A
  681.         {# l* x! `  x  p4 N, E* Y
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 f5 H5 f9 A$ P" n* Q9 Y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & `& d5 Y8 w$ q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 s2 k) X% I8 d5 A- u7 H4 V
  685.           Sleep(33);
    4 f; T7 i. R" o  ^! I
  686.         }1 A5 y6 Y: U2 T/ x& d! g$ d) }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 [, B# u+ ?  a) k0 K& T- B* \
  688.         dlg->ReleaseDC(pCDC);" z3 k4 N% e' A% x' |& U# {# {
  689.         DeleteDC(hdctar);
    : b. A# U$ [- W. Q; f* X3 |
  690.         DeleteDC(hdcsrc);9 H. a& e. Q' R9 p
  691.         DeleteDC(hdcorg);
    $ Y  M  T' ?. T0 g' A1 q0 R
  692.       }: \( h# g" J  j" ~# W
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 s' U' {8 V5 I5 w9 Z7 g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ H! R  G9 l) X1 ?
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 z* I+ |# ^6 b# b* G  d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");8 S) P( F' B3 _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 n' l6 {- D5 [
  698.       if(!Dn.Connected())
    $ I6 K6 H. j: D8 E* b
  699.       {  u% ]1 R2 x% Q; P! F
  700.         dwTotalFiles=1;; H7 T% D, o3 Q/ w2 N+ s# P
  701.         dwDownLoaded=0;8 h" k; T, o. \( Y! q; E7 O1 _$ G, J
  702.         bSilentStep=TRUE;* a8 F+ l! A, ?- r2 ^. J0 s
  703.         bCompressed=FALSE;
    + g0 m; ?# }7 b0 A% k2 q: E
  704.         strExtLocal.Empty();. X$ u: y0 c, F( z" S6 ?& ^% V5 g
  705.         strFullName="readme.txt";6 Y0 ^2 T+ u! R) w% f
  706.         dwProgramState=AP_CONNECT;2 }& r, Y# o; J% o+ f
  707.       }" {4 n) Q6 S2 u# b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# K! W9 Q1 j, q' I0 R0 T  u: c
  709.       dwStartUpSteps=2;: E' M6 u+ z6 ~$ a* T6 @7 e
  710.       break;+ K9 [. S% Q  A: L
  711.     case 2:
    & V) c7 e; ^. T6 M
  712.       {
      N+ y+ W% @+ F  D% c4 v
  713.         int iEOF;
    % }& Y$ F9 Z$ M, |$ ~9 `% `" F- q
  714.         FILE *fp;
    8 s8 V. y* ]6 a( U7 s
  715.         char szString[512];" Z7 n7 S& @  F2 n
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 Y( Q8 S$ d8 g- q
  717.         if(fp)
    4 M1 j1 x9 R( @9 Z; m) ]
  718.         {2 h/ ?* A/ v6 w+ Y' z
  719.           do4 B7 ], Y9 `& ^' T* Z7 \. m
  720.           {
    8 W/ Y. Q4 ~' W. Y
  721.             iEOF=fscanf(fp,"%s",szString);, S. }- F- c$ i, g) A6 g9 i1 q
  722.             if(strlen(szString))
    . C4 O2 ~) M* Q" d& F0 p
  723.             {
    1 H2 Z. A& M+ r
  724.               if(bFirstChar). N! K% ?: a* Z8 X" h
  725.               {7 P% _+ g1 E& I% j) ]
  726.                 bFirstChar=FALSE;
    % F# `" ^- A' e/ E. s( g% \
  727.                 bConnectIsBig5=FALSE;
      I$ s$ @. d3 x# n& {* e* H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 ~. P' W/ J5 Y/ }6 E6 N' z
  729.               }9 y# j% h! i3 G3 n* d+ x, v) V% y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& ?: T( z3 k" a; w" m( B9 x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 |- d( `2 p0 t; w
  732.               dlg->m_ListText.AddString(szString);* P8 i* C% j- |) X3 s& v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      c0 ^  n, n) ~7 n: o
  734.               *szString=0;# i, B/ u# e8 u3 E* s! S
  735.             }" ~5 P9 v2 C: m/ z" w, {
  736.           } while(iEOF!=EOF);$ j) T3 H8 N8 \5 Q0 k% s$ y/ o/ _
  737.           fclose(fp);
    ) s$ m. J  Z0 V, Q# n9 u
  738.           unlink(".\\DownLoad\\readme.txt");
    3 j/ o% r" K. U) p. ^+ t
  739.           dwStartUpSteps=3;
    + ~+ l8 s/ u! X3 X+ o/ M
  740.         }
    2 _: v7 G' b  Z" |% g: Z3 K, Q# d) ?
  741.       }
    4 R- I: R7 C6 y4 n
  742.       break;7 e9 n  M/ Z# A" ?1 {
  743.     case 3:& A/ z2 Y8 v6 ^) n
  744.       if(!Dn.Connected())
    ; u9 R' T8 r0 X6 {- x- Y
  745.       {  {  D. }. J& t7 u
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 ~4 R6 S0 ~2 L" N7 M
  747.         dwTotalFiles=1;; U3 x# E+ |: a, p' u4 F) y
  748.         dwDownLoaded=0;5 z/ f& q" H2 S2 ]- P  B3 R. W
  749.         bSilentStep=TRUE;
    ' S# s* g: w0 `8 ^" z
  750.         bCompressed=FALSE;3 a* h8 ?" \  b6 J
  751.         strExtLocal.Empty();
    $ r1 S% r" m. H
  752.         strFullName="checkversion.txt";+ ]+ n6 K0 |9 U  |/ V
  753.         dwProgramState=AP_CONNECT;/ X; }9 M2 [* j
  754.       }
    7 S: S, i; `. Q- y4 Z' p+ W
  755.       dwStartUpSteps=4;
    " m' G, _; k$ ?, E
  756.       break;, `1 ]2 T. W6 a- Q3 s# {
  757.     case 4:& [* l: `7 w$ L* Z, f6 I
  758.       {) f$ u/ O( P: p: x2 Y
  759.         FILE *fp;
    & I& x7 h  v$ k
  760.         char szString1[128];
    7 g4 z! c. A( u; j& o
  761.         char szString2[128];
    ' `  u( y% x1 R& j$ t7 T% V; G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 x8 p+ I; z. {2 Z0 S+ F0 V# ^
  763.         if(fp): d% |$ w3 [1 W+ G0 P3 R
  764.         {
    ' n, {" f* Z0 b/ S& u8 f
  765.           fscanf(fp,"%s",szString1);9 g1 A) e5 l7 Q1 Z* P) I
  766.           fclose(fp);
    ( s0 K7 H) v$ h; Z& @$ `0 W
  767.           fCheckVersion=atof(szString1);
    # O8 D- Q% q4 f; f
  768.           fp=fopen(".\\checkversion.dat","r");
    ! P, w. _2 Z$ X
  769.           if(fp)
    # B" z# O- }& g7 B. W% S/ p9 G# |0 P) `
  770.           {
    7 f8 M/ M8 r) f2 D$ t: x
  771.             fscanf(fp,"%s",szString2);7 B) ]/ C/ z2 C3 p6 G$ C
  772.             fclose(fp);
    - [$ b& N$ t+ d+ \
  773.             if(atof(szString1)!=atof(szString2))
    - J: G$ G2 W8 ~) a  e
  774.             {
    ! G6 Z4 `+ l4 z) O* J' @) d' y
  775.               if(!Dn.Connected()); a: h1 j4 }3 Y1 v$ \1 d
  776.               {
    . Z+ D2 t0 B, W% |1 }3 r- j: {6 J
  777.                 bFirstUpdate=TRUE;
    5 n" m- x! j5 S+ s
  778.                 dwTotalFiles=1;. s8 h! t3 j8 X8 {9 G
  779.                 dwDownLoaded=0;
    8 I/ p! n' v- j6 H
  780.                 bSilentStep=FALSE;
    ) g0 o; u) m! C1 u3 n  Z
  781.                 bCompressed=TRUE;
    : P/ S5 h- g9 f& j
  782.                 strExtLocal=".\\DownLoad\";  y. C4 _' F! a: b
  783.                 strFullName="update.txt";) o+ |4 c+ ]9 [
  784.                 dwProgramState=AP_CONNECT;
    6 ]3 L( g' g* i( ?- {9 i- ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      z+ c: F# ^6 L+ m- p1 U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : g. b' Y6 h8 |+ }8 u" ?
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! A; c* h1 L3 a; |' \
  788. 8 m" Y* i7 z8 o$ Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. s& c' w+ |2 V4 }: i0 k" R7 s
  790.                 unlink(".\\DownLoad\\checkversion.txt");% w$ ?( c( p7 p1 g8 q0 w
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; ^- I0 x" G4 ]6 D7 k7 D
  792.                 {
    % g8 t; C3 T9 y1 E- `0 y) A9 k2 s; C
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# R5 Q3 a8 n2 a: u3 f7 [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % I; ~  W! h' o, a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 q+ o; X1 W. s% }+ I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* h( z. Y  V. K, u4 ~3 u
  797. , n2 q) m  ?8 o, \( L+ K( a- h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* K% C' F9 o9 p$ j) u% ]5 Q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ j6 x- L0 v7 U# h# q- [
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 [0 X- f9 x! H8 h) ^+ s0 c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % C# i# r. q9 f+ n8 x* ?6 @" X
  802.                 }
      c. d# N1 D$ v. I0 r
  803.                 dwStartUpSteps=5;, T! v9 V6 F) R. q8 z. N$ C$ L, a
  804.               }( a4 E* c6 X+ t* D6 ~' S* H
  805.             }
      C* b; o* c( V  u2 y' V
  806.             else
    # x) |9 x5 M9 C1 g! b# O( h  {% t
  807.             {: q& F# w. ^8 x4 V0 x* D
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * a% p1 }4 e9 r7 c9 _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % g% m0 T" j2 A# O1 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * M. k! g* X6 [. f' Z" k7 _# b, Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 z1 \2 c/ g/ u  E

  812. * k; G  R$ R* Y% t' l7 E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) f) O" v/ W1 T6 G$ l! W- N
  814.               dwStartUpSteps=99;
    + [( ^% Q9 H7 y
  815.               bFinishUpdated=TRUE;1 k7 j- w: \$ O1 l! h  K
  816.               bCanUpdate=TRUE;1 ^+ o  \3 k1 ~# X
  817.             }& ^1 V' P/ O2 R# t
  818.           }
    ) T; n- B; C, b( O: q
  819.           else
    5 Q6 r* k' G+ \' @0 \
  820.           {5 G7 |: L! J) j! ^- |0 f
  821.             if(!Dn.Connected())+ j2 y- _' d5 ^
  822.             {* J; t8 Q( o& d. h0 t, D
  823.               bFirstUpdate=TRUE;3 B) x& C3 }1 H5 J
  824.               dwTotalFiles=1;
    ! {* W" z$ D2 H
  825.               dwDownLoaded=0;
    % i" s! {5 J  X4 M. g# J9 U9 n0 p" B
  826.               bSilentStep=FALSE;0 z3 K. |: v4 e+ [% x
  827.               bCompressed=TRUE;
    9 {0 y8 P& V) t. n
  828.               strExtLocal=".\\DownLoad\";
    1 F( z- M6 u" T% ?# d
  829.               strFullName="update.txt";
    9 s3 b$ X2 ?0 o
  830.               dwProgramState=AP_CONNECT;
    ( ?3 g% g% O, C, a2 ?3 C- y, v& F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 o; }$ n; m+ u/ U
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 b* D6 N& H  l/ f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( M3 t) w2 E; d1 i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) d" S1 b+ D( n! z6 n2 m9 `3 e
  835.               unlink(".\\DownLoad\\checkversion.txt");% E  T" `+ @: N) P7 ]/ }
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 ~' N" r! U1 N7 a/ C- W7 {
  837.               {1 ?; u9 g) ?: [' g" @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");: a& o( E2 `% d2 t  w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 H) O1 b3 [" H6 n8 T1 `3 r! s0 T4 [
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - z, q. M8 d1 H# N. E. n8 K$ I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 `  [2 {" r: x* B4 q+ T$ h' ~7 J
  842.                
    4 H6 s, ^" ?2 ]& {* s! S$ d
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% k- `6 H- Z) C) {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 l" w9 T7 l- W) C6 V7 I
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");+ {3 o* a0 u3 U3 k+ M7 h0 ^( C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ G# C5 v6 r" _: _2 j
  847.               }/ l6 o% J  d4 [; O4 S. z+ ?
  848.               dwStartUpSteps=5;
    % i/ N9 [4 ?# \5 f6 r2 ]
  849.             }
    * A3 h- ^; K4 e6 Y0 S7 e8 n1 u1 w
  850.           }$ D/ J& D& }/ G- ^& h8 E- o( ~
  851.         }
    ; v6 x2 j1 o& S( T
  852.         else( B1 m/ ~, \& t! k7 ^" S
  853.         {
    " ?' y! W2 T" H4 N8 _, @
  854.           dwStartUpSteps=3;
    9 Y: U3 x' {5 h1 [. D
  855.         }
    ; _" J# \" h8 l. {
  856.       }- i! N' x" R. c: p' }& \, u0 }
  857.       break;
    3 x; p, \8 A. p# S/ h5 }6 w
  858.     case 5:4 B4 Y3 A8 y' c
  859.       {" k  f8 b* M7 Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    % Y( ~' N! j2 B' P5 I
  861.         {
    7 |: @- q! w3 _+ ^
  862.           int opt_overwrite=1;7 B0 c, s' c) c7 u" w+ a* Y6 D
  863.           int opt_do_extract_withoutpath=0;% R7 F- n4 n- i' }& i3 U
  864.           unzFile uf=NULL;
    9 c' t2 u1 C/ h& H! w: n, x6 n" E

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

  Z* D# J8 Z, I

評分

參與人數 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, 2025-12-5 21:04

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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