CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( L2 g+ g* V' y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & m9 C3 L2 w* e0 u
  2. //
    ) n' y2 {4 z! R

  3. % |1 N! S+ ?+ X. [$ x% d
  4. #include "stdafx.h"
    8 a* q/ B6 g. A4 j$ M% l* r2 D

  5. 3 V7 P2 b1 e- d8 J2 @: y
  6. //#define UNICODE  l% D% P0 T# i8 K3 {) r* Y
  7. //#include <gdiplus.h>2 b& {" n* v6 c  P- c
  8. //using namespace Gdiplus;
    8 J0 A, X- ]2 `5 U3 S

  9. 0 M2 S7 m$ @4 t8 z! d  p. x
  10. #include "RevApp.h"' P- V' N( z' T& a
  11. #include "RevAppDlg.h"
    # P5 ~* V; V) a7 V( T5 i4 u

  12. 8 O) W: Q0 `' X! \/ t! I
  13. #pragma warning(disable:4786)
    3 e+ }' e" H! ~- G$ J$ e
  14. #include <map>1 @( R* g- `- w& y) R! g
  15. #include <list>
    8 _& ~$ r' w3 T3 k0 `8 u8 }" w
  16. #include <direct.h>
    ! m  z5 y/ O7 L+ `4 I

  17. : e0 E6 M# B& E8 L7 a1 ^. _0 c
  18. #ifdef _DEBUG- F5 |8 U0 P2 Y7 _
  19. #define new DEBUG_NEW6 b" j# q, I3 d8 h% l  Z
  20. #undef THIS_FILE$ M+ A% Y: P8 K1 Y  ^; T) p
  21. static char THIS_FILE[] = __FILE__;
    / Z3 @  O4 W# l; R( D! b4 |
  22. #endif
    / D: \+ m# w/ ~) @. |- W
  23. #include "SkinResDef.h"
    8 M. S) g8 v) J7 Y& W
  24. #include "ChangeBG.h"
    8 \% z4 A. O: ?% f3 o: }, I
  25. #include "AFXINET.H"
    5 Y/ l2 D2 _0 t# t- t

  26. 0 D4 d7 C: Q2 P5 R0 n) o
  27. #define TRADITIONAL_CHINESE 08 \+ |# y* l; q: x5 p' O
  28. #define SIMPLIFY_CHINESE 1
    + B- T/ A) C, f5 G
  29. #define ENGLISH 2' I  Q+ g8 W. @$ B/ C
  30. int m_iLanguage = ENGLISH;
    * f& O0 `  }# e
  31. /////////////////////////////////////////////////////////////////////////////
    ! x* Q  l. G4 f! r) D& X+ T
  32. // CRevAppApp' E+ W* x' J3 ]2 q
  33. . D$ d, _! _; @8 A& e( z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 _. E) s6 N& O' _5 }  g0 k  M
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / T4 P5 j+ M  R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ' ~: p1 f  j: O- ]5 D& N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 O# J' I: W6 j4 E8 D" d# L
  38.         //}}AFX_MSG/ g8 n/ z( i1 I& @; C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % g/ Q* X7 I* v
  40. END_MESSAGE_MAP()/ T7 d" W# v( V  O8 i3 Y3 t

  41. 3 k5 A4 T$ V5 q1 q% g0 [8 l3 }
  42. /////////////////////////////////////////////////////////////////////////////
    & x- r: s! g; a! Y' R
  43. // CRevAppApp construction5 p/ U; g0 F! N% G2 g

  44. $ c! s- Q0 ^" x9 d) j; {( T- w) @
  45. CRevAppApp::CRevAppApp()8 _! X/ o' v3 y
  46. {0 I1 {! p+ d$ g) L
  47.         // TODO: add construction code here,
    " y# A9 N  I5 z  h
  48.         // Place all significant initialization in InitInstance
    ' D! y! i5 f. E5 v7 ~- Y7 D% E
  49.   bDisplayIsBig5=FALSE;) L, y- h$ h0 v, B* V; a; Q
  50.   bRestartUpdater=FALSE;
    , |) \7 b! J0 g6 M! ?
  51.   bFinishUpdated=FALSE;6 }5 V- f$ f* J- u8 s5 c# O+ M3 _
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % u7 m3 R5 q! I5 S2 ~1 M
  53.   InitChangeDataBig52GBKS();2 W# v7 t* v2 _# t! t
  54.   InitChangeDataGBKS2Big5();# G) P( ^' g5 n! \7 B& s$ Z
  55.         //3 w5 d( n1 A1 D
  56.         bClickRunExe = FALSE;
    ( v. d7 l3 Y: @
  57.         //
    ) ^6 J2 n1 O7 E3 n5 t; I* s
  58. }# g% Z: K+ X; k- z# v6 a4 i8 i/ ~
  59. : R, z- k( z# e( n2 E" \
  60. CRevAppApp::~CRevAppApp()
    ( n/ N; X* m8 X) k9 `* G- f( _
  61. {
    - s6 Y9 ^! {- T7 ?" Z3 M, x# F
  62.         // TODO: add construction code here,; Y1 t" L$ W, y' e5 P& C' ^; ?, y# r
  63.         // Place all significant initialization in InitInstance5 f& b& H# k- f
  64.   EndChangeData();0 x$ ^' P9 u* }- s) ]& d
  65. }
    ) T9 Y. [; }0 ?/ W

  66. & z* A3 ?; j  n; |9 i
  67. /////////////////////////////////////////////////////////////////////////////
    1 R+ r2 x5 v0 E5 s* s- R
  68. // The one and only CRevAppApp object/ d1 W' i) C* m1 O
  69. 4 U8 K9 s, T: h
  70. CRevAppApp theApp;2 j/ ]0 K" I; L6 _9 F, a
  71. 5 h7 f0 O& D# e2 l- D) t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ z7 [0 Q) ~* p
  73. {
    % E5 ^6 s8 ]: {! S% h( [/ X2 J
  74.   int iEOF=0;
    - {. x# Z) |: `1 w9 n7 a, Q# k7 k' \
  75.   char szTempName[MAX_PATH];
    3 I5 I! c: y  n+ Z8 L8 `# T+ p
  76.   *szFileName=0;
    $ h& _1 |% c6 E' y; b9 L
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 e6 X& u7 L; J7 u" P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 t; d9 u; G% G, g
  79.   {
    8 F7 p1 @" L) w& \5 r( P
  80.     strcpy(szFileName,&szTempName[1]);
    , c( L1 J7 j0 F& ?5 m4 t  I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 c& @7 U# }$ U8 d9 l0 ?8 n
  82.     {
    0 w" o$ l2 P+ H5 Y  {$ l
  83.       iEOF=fscanf(fp,"%s",szTempName);, W8 E7 q6 ?6 O2 H
  84.       strcat(szFileName," ");4 r( j6 P# @; p. c- i0 f9 x7 t
  85.       strcat(szFileName,szTempName);7 W7 x9 c# `4 L- E1 V3 J
  86.     }
    , O2 |( Z' r7 I# B
  87.     if(strlen(szFileName)>=1)
    4 U4 k) ~: Z9 d8 P  W" P1 W. b
  88.     {
    ; d! _2 g! }) T+ M$ }6 j& @
  89.       szFileName[strlen(szFileName)-1]=0;1 Y6 [5 }1 a) o- o" n& W" ?
  90.     }
    4 R$ m9 T6 y% J9 J: X
  91.   }, ?6 [5 Z6 g3 D1 u, [7 z! F. ~  w2 d
  92.   return szFileName;# M( j* h0 m! Y: ]* G
  93. }
    $ m; _' X' I% t

  94. ! |: k. @8 Y& c( B3 }2 l8 y0 \$ ]' d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # G! i- A, t% \6 q# E, T: K. v# m
  96. {
    & c( g) K# x6 z( S
  97.   FILE *fp;
    # C1 q- n: a" w; o
  98.   char *key=NULL;
    , d) I- G9 k: Q1 ]' A
  99.   char version[MAX_PATH];
    " K& N  C7 O7 I! K" l7 Z
  100.   LPUPDATEFILE file,olds;% _7 B, e+ J8 O) Y# c
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 n$ P; u0 H- p; @) A, u8 _
  102. : {( K  z% f: w+ y0 ?3 f3 W
  103.   UpdateList.clear();
    : P7 [8 k3 J$ t. `; H
  104.   UpdateFile.clear();
    0 y* n9 S3 s( F- i1 p
  105.   if(GetFileAttributes(filename)==-1) return false;% W: Z* }0 O) \+ a- [& M
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 z/ W5 H) \7 ^( O6 v0 Q$ E) r
  107.   fscanf(fp,"%s",version);: S# b1 Q" V8 q1 `2 @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) [1 M/ J! |5 z/ u8 X2 |. w
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % b7 N  `; e7 H7 X, j+ i; a9 W, I
  110.   {* h# c8 k/ F- m5 G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 `/ ~/ A, \9 q
  112.     fscanf(fp,"%s",file->path);; p, H5 q3 s+ }9 I5 a2 W7 d( W7 T1 I
  113.     ReadFileNames(fp,file->file);/ r$ O4 s6 e3 }$ u  O
  114.     strcpy(file->full,".");4 U3 [5 {; t% X8 H) x
  115.     strcat(file->full,file->path);3 G0 A! J/ Y1 [- s. D7 |7 j4 D
  116.     strcat(file->full,file->file);2 W" ?0 ?$ y0 s  |% i$ G& t9 j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ T& R" Q# S. m% V/ q$ }& w9 l
  118.     {
    ' B4 k4 C" t! f: L  P; I! b8 I
  119.       file->vers=(float)atof(version);
    9 i9 y) P& p7 W6 T
  120.       UpdateList.push_back(file->full);
    : l0 X" q) ~% m  v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ ]* D0 S5 }  n# n9 s- s3 B
  122.     }) N' U+ H5 c, N9 E$ y
  123.     else
    7 z# W: r' M4 D
  124.     {
    1 @& v, S9 y+ ~' @, c1 ~. v$ p
  125.       olds=(*p).second;
      N# T5 j5 v+ C$ x: T
  126.       if(olds->vers<(float)atof(version))
    ! K* G% ?8 _$ b5 j
  127.       {
    9 ~- W4 }. f" O* W1 g' v8 ?
  128.         olds->vers=(float)atof(version);
    3 w8 w$ u% D& G# E7 r
  129.       }
    8 V0 P7 }6 e3 v8 m- I9 a% U
  130.       free(file);* m5 ]* b) ~" g8 C7 |
  131.     }" w8 v/ Q5 V: O; V  e  Q
  132.   }
    9 `) O, u- p% Z* M9 s! p
  133.   fclose(fp);" F/ s% l4 l/ z9 R
  134.   return true;; y! O. ^0 m5 Y& \6 v2 B! V
  135. }
    6 _' [) g$ C9 U; c9 \, A  ?
  136. , t. |$ O/ L& m" k" N. W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , r6 q2 f* P& ~1 }4 h2 J6 {. |1 z
  138. {
    ' z1 C" z6 V7 P# s
  139.   TCHAR  szFull[MAX_PATH];
    + g. W! y+ M9 s* z$ H
  140.   TCHAR *token,*inter;
    % s) j6 J: v+ s: v8 n1 J, O& G
  141.   *szPath=0;
      W% f. q3 D% e5 b5 d2 ?
  142.   strcpy(szFull,szFullPath);
    3 C3 ]6 y! w/ l% A, Y7 q% G
  143.   token=strtok(szFull,"\\/");
    ' l( T9 G) x6 s
  144.   inter=token;
    3 _! V* @9 [; e# c" f8 s& p& e
  145.   while(token=strtok(NULL,"\\/"))
    6 Y, j0 q6 T; r# N* @8 m' s
  146.   {) X& O' x: m7 ?
  147.     strcat(szPath,inter);9 E0 E0 t& c: I/ G" S
  148.     strcat(szPath,"\");* R6 p+ e2 y, V, p- v4 b; i
  149.     inter=token;
    % k: L- c% ]* V5 u0 A" B
  150.   }
    7 q/ }2 N' J6 u- ]( _
  151.   return strlen(szPath);
    , e9 O8 ?7 I  s- @; A" O
  152. }; ]6 M% p4 j2 l! q3 k

  153. + p$ t: l/ g0 j" o5 N" x7 {% W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ y. L. D: R1 n$ A9 @: J
  155. {
    8 v" }- u. U) X/ J) N0 K
  156.   DWORD attrib=GetFileAttributes(Target);
    ( U! A' O. `/ b" @. e6 N/ X; x- |
  157.   if(attrib!=-1)
    4 ?5 L8 S; |8 R; ?
  158.   {  n6 Y* q" _' u" B% ~/ H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( G# s& u! [: S1 l/ N; w
  160.     {
    - J$ h# e( u5 p/ E/ `
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , D, d; I+ z# P
  162.       SetFileAttributes(Target,attrib);+ }7 U- N0 n% b6 N8 M$ |( E
  163.     }
    ( V- m5 C' f( y% q3 d( w# _3 f
  164.   }
    $ K6 A# @. c1 l1 v# X) r
  165.   CopyFile(Source,Target,Erase);+ `7 e. G0 O3 U- J& A: Y
  166. }% s) h0 u1 B) W
  167. # r' H* G* q! T5 ^8 P' _; p3 m
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 @+ J3 A; `- r( F
  169. {
    % N  y/ M  g7 J& v3 E* d) o: r" I
  170.      FILE *fp;2 y" x! M4 w& |  i9 |
  171.      char  szBuffer[8192];& S$ y& o5 L5 ?2 T
  172.   va_list  argptr;- v' X! u! b4 g8 F
  173. - ^5 E" B1 v: @' c% b4 Z
  174.         va_start(argptr,message);1 M/ w! z) v! i. F
  175.         vsprintf(szBuffer,message,argptr);6 X, Q" B: y# m% ?
  176.         va_end(argptr);
    / f) T4 i. \5 A  c( J
  177.   fp=fopen(FileName,"a");
    " J- U( f# o7 T( f3 H  E
  178.   if(fp)
    3 j0 p$ B$ i; r6 Z; Q; I
  179.   {
    : M8 R# s! ~4 o
  180.     fprintf(fp,szBuffer);- M: F( w) M$ |6 o/ n$ _! _. f
  181.     fclose(fp);8 n* n% x# x  f; ~
  182.           _flushall();
    6 Q" ^+ y* v. \2 z5 Q
  183.   }
      `7 k: h: ]/ F( y
  184. }2 a4 x. ^# c( I6 F/ E

  185. & L5 ^8 y4 W1 L. O. V7 v1 G8 ~9 c3 W
  186. BOOL CRevAppApp::Fclearf(char *FileName)% \' v: A0 m8 U
  187. {
    3 r7 t1 N  }2 K$ A
  188.      FILE *fp;
    1 E" g9 L" G1 p1 g9 m% m
  189.     DWORD  attrib;
    2 y$ v( x& ~" z+ d  i; \
  190.   attrib=GetFileAttributes(FileName);7 f" i7 O+ g7 p' k8 a) X
  191.   if(attrib!=-1)) [9 m4 L$ x8 q: d, Q
  192.   {
    1 \& D" O4 [6 i1 o  e# R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ P8 f* e8 o# `1 `3 w
  194.     if(!SetFileAttributes(FileName,attrib))9 P% o- e! y3 W+ ^- R
  195.     {" h+ ~( |8 @- N8 K' x0 c
  196.       return FALSE;
    , ?  J$ H( f$ L6 S6 a1 S( J
  197.     }" M, u7 t& H. }
  198.   }
    - a; k3 v3 C) m, g* j$ }# I
  199.   fp=fopen(FileName,"wb");9 X$ P1 G9 K7 K
  200.   if(fp)' d' W8 J& N! M. W/ v
  201.   {) h) }! _+ |5 t  i( a9 p
  202.     fclose(fp);
    5 s/ L1 x# e' j) M6 {1 }* A
  203.   }5 y+ l5 J+ {$ N
  204.   return TRUE;
    ' O3 ^! m3 F+ q. ~+ U& M2 P0 \
  205. }
    0 A& u; \$ T& S% @

  206. 1 `# L8 ~& g3 N& I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)5 @9 Q4 I3 q3 B' p# o
  208. {
    - Z3 X! _* S) P, K% H( e
  209.   char filename[MAX_PATH];
    5 `  J: D7 J- l+ q
  210.   LPUPDATEFILE file,olds;2 w- R  _* o/ w2 `; L9 \- I& F
  211.   std::map<int,CString>::iterator i;% e% J+ p% S/ i3 K8 O) [; K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 ]3 L7 e9 l) ^8 b5 A* v1 a: `9 O( C& l
  213.   std::list<CString>::iterator l;
    ) z: ?* j& {3 M0 k6 z7 s! G- ?7 e: `
  214. ) k% {1 l3 r$ S! F" G0 o2 g6 e
  215.   if(bFirstUpdate)) c+ L- I" ^; J$ {# }# O
  216.   {
    ( ^3 Q( F" I9 y6 m
  217.     dwCurrFile=0;9 T- u+ u; c) d3 K
  218.     bFirstUpdate=FALSE;
    - u0 d9 Y( R- W$ {6 Q- W
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 L" u& }( ?5 p+ k
  220.     {
    - R+ B3 ~2 P  P) Z( M$ w& E8 }. Y1 K
  221.       dwTotalFiles=UpdateLocal.size();
    # z0 B! w0 N5 U+ v/ F! a
  222.       dwDownLoaded=0;
      j  G" j/ P; N. H0 q( F
  223.       bSilentStep=FALSE;' C" z# O! [6 H9 h* e* r% W4 ]  H
  224.       bCompressed=TRUE;& v. U" H2 c) f2 G4 f" k" f" }
  225.       strExtLocal.Empty();
    " z: B: J$ }7 J8 _( {, Z/ u0 |, F
  226.       strFullName=(*i).second;
    . r/ F  b* P+ Z- d
  227.       dwProgramState=AP_CONNECT;2 Z7 w- W! |( n
  228.       return TRUE;
    8 U' g. f1 P9 i  X8 k2 h
  229.     }
    4 [7 d% g) a2 W  A3 `6 i( w
  230.   }
    6 [( k# K6 j  j& P- y. ]; R! x
  231.   else if(bRestartUpdater==FALSE)
    " u* F& r- F" m: J! J( V
  232.   {) f' I) `  @# V! `& _& r! D# J
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), I! |- u$ r7 ^4 `+ z
  234.     {6 c# o3 r; I2 P  s
  235.       file=(*p).second;
      u/ S2 F0 Q' o  R! w5 b
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * w3 V) `  `! @3 i& Y8 q
  237.       {
    3 @" _+ p0 }- o! b& n4 T5 w( f5 z3 W
  238.         olds=(*p).second;: a" _8 n" o+ {( X; g% n* v
  239.         olds->vers=file->vers;
    - g+ n) f1 n0 @* \# D
  240.       }/ T& W* g- _; k3 P8 @2 T4 v% Q
  241.       else* S& o7 R1 }4 Y- c6 t6 M4 M6 j8 _
  242.       {6 f& I& C; ^" c* y( D7 F
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 {  o8 r: K5 P* m) A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));8 _9 H4 X% E) n8 h+ U. N# \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , K$ Z. ]4 b5 A/ E& L9 b
  246.       }$ O4 d% t; K% _* o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 L8 i/ s( M9 @5 k6 p3 z% a! [+ R
  248.       sprintf(filename,"(%s)",file->file);
    & U, \/ I  R" m$ L; v* I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # E; F: N" E. H0 Z* f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " ]  [4 C% D8 U8 h, R
  251.     }5 {; J/ R" ~: i1 I  c5 F
  252.     dwCurrFile++;* ?* K7 u: P- _4 k, P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); ~$ m/ v- J4 d7 H" \
  254.     {
    5 E" c# r& ]. O3 q3 p0 V
  255.       bSilentStep=FALSE;
    0 N4 l% J4 a& u% q$ [. n8 ]
  256.       bCompressed=TRUE;. D  E) E, c0 C9 r  q
  257.       strExtLocal.Empty();
    8 d6 T$ i- d  s; h( R0 k9 r  x+ _$ p
  258.       strFullName=(*i).second;
    - j3 N+ O) ]2 a/ Q; h5 S2 s0 m
  259.       dwProgramState=AP_CONNECT;
    ) A# e3 O9 q+ _! p
  260.       return TRUE;3 l+ |9 J; ^3 }0 ]2 h1 V2 X* X
  261.     }8 V, T  e3 [) O" t  g& @
  262.     if(!bRestartUpdater)
    1 \5 E0 W, l  h) W! l3 W3 f5 T" K, T  u
  263.     {
    ' @8 ~4 t' q2 j  Z" i
  264.       int iCurrSize,iFileSize;
    * y7 o; `3 X4 D! U9 E+ b: u
  265.       iCurrSize=0;2 V6 W4 L( W/ x! c; p8 l5 M
  266.       iFileSize=UpdateList2.size();3 O  ^* K2 [" h. ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # I2 l& }, b; {$ ]+ n; g$ H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 C8 x* T! H5 V. J7 v9 P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* H4 m: b* T6 t. d# k. ]3 R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 S4 a( n  ?9 ]8 [& c* C9 S2 D) f, }
  271.       Fclearf(".\\update.dat");# j2 Y! P9 n( W9 h5 c: m
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 {# ?/ z) e2 y9 A0 f5 x2 n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 K" j! M" @7 x" D1 h  }, p/ M4 S$ `+ m
  274.       {% n5 D; k6 U. e
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()); v% B1 T/ k& s/ P# I% R% |
  276.         {$ k1 I' y7 q- L7 u5 ~/ T( M" Y
  277.           file=(*p).second;
    3 x/ I2 `% ^+ T
  278.           sprintf(filename,"(%s)",file->file);
    ! j3 |! D5 S, p* W% ~
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 i% i5 P7 Y6 J+ N/ J2 g. ~1 R
  280.           iCurrSize++;
    ; m0 v9 x4 ^' c" p% y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 ~! b" w# H' h' X9 K$ \3 ]
  282.         }0 ^4 Z6 S2 }1 `# r# b' v9 p% v3 _
  283.       }
    2 Z5 T# }  L# K6 c; T' \) [
  284.       unlink(".\\update.txt");
    ' ~. S" ^2 x' Q2 s7 t# i
  285.       unlink(".\\update.tmp");
    ! K. z. t  G8 [( l
  286.       Fclearf(".\\checkversion.dat");! g! Y. ~7 f) |. _: l; g3 m
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& V; L) \; w3 c- X9 y
  288.       if(UpdateLocal.size())* R8 _0 s; X+ g; R
  289.       {" L. c, f( J  g6 ~. {2 `# J9 Q
  290.         UpdateLocal.clear();
    3 h# `1 h4 f6 {5 Z1 R- L
  291.       }9 i$ `$ t/ B9 E2 s* R( D3 e
  292.       if(UpdateFile3.size())
    6 ~! k: G$ ~% A7 p! E" U
  293.       {
    % t+ H6 x6 N, C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* b& v" h. f5 Q9 @& ]9 Z& N/ \, l
  295.         {  x/ Z0 |( B* v/ b4 S+ O" A# E
  296.           file=(*p).second;
    2 `! R' Q- _! d
  297.           free(file);
    ) p/ w3 M) \7 [4 w* X+ M
  298.         }
    * n1 Q4 d: q& s; ^& x; `7 `  |" h
  299.         UpdateFile3.clear();
    , u: G1 O: Q. f& h1 r! Q
  300.         UpdateList3.clear();2 K, I7 u0 _- _) Q; I# l
  301.       }
    # A2 Y$ T& U0 r* X0 s# e
  302.       if(UpdateFile2.size())
    / [0 Q. C) q( z. I
  303.       {
    2 C: p2 _/ I1 P6 \7 T* S* X- {* ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 z2 `; n/ _* l8 I
  305.         {" ~+ t* ?5 T2 w5 {: Y9 i1 N
  306.           file=(*p).second;# S5 l! D# N9 D" ?) F
  307.           free(file);  d& R0 h9 G, ]
  308.         }! {, Q9 \  m( \1 d( W
  309.         UpdateFile2.clear();6 \4 l. K1 c7 K
  310.         UpdateList2.clear();; }! F. q$ [1 ^5 ?
  311.       }
    2 x5 @# F# E( V+ B1 v
  312.       if(UpdateFile1.size())
    : \1 U3 B% A; q7 B/ i
  313.       {8 N+ H0 _; I0 f6 ?! E$ U  C( G) B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! s  W' b0 z) z" {  m0 Z
  315.         {
      t7 ?5 y1 R; R( l) H6 }
  316.           file=(*p).second;
    + K0 h# O; M# d0 s. t5 t
  317.           free(file);
      P" v6 t5 Z1 \' E6 h
  318.         }
    - e7 a* g* A1 G/ Z
  319.         UpdateFile1.clear();% M0 t. c3 C0 e/ X: F8 ^4 l
  320.         UpdateList1.clear();0 {% O" [* k1 s2 T$ Y
  321.       }
    . l, G$ B) j4 g4 ~: d$ B) H
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. ?8 U) D9 x. B1 E
  323.     }
    3 ~1 s0 g/ }1 z$ X
  324.   }- }# M. u" H- S# \& ~9 H
  325.   return FALSE;
    / J) l- ]3 w3 M% z* [8 h
  326. }
    6 x9 |. g8 p! c( m

  327. 8 p: X/ y* B* L
  328. void CRevAppApp::ClearAll(void)+ ?  e. g5 r! K" ^7 a+ G1 A
  329. {
    * m  j& s& z- l( J& l
  330.   LPUPDATEFILE file;- M! k  Q  U# h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      N5 [8 D4 M+ _6 [0 s4 M

  332. 2 Y$ I  ^" G; H/ N/ m5 I: [* Y' d
  333.   if(UpdateLocal.size())
    % s1 \" a/ X7 }
  334.   {
    , Q( Y: ^& a) z1 |+ b
  335.     UpdateLocal.clear();
    # ~/ M. k/ S/ ?& X6 _( ~( N9 |
  336.   }
    0 h, _# ^" y# C
  337.   if(UpdateFile3.size())
    * u  z$ B  E$ j# \
  338.   {! [4 C, V( B! M: w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ B4 X4 ~0 I% D' v; e# {
  340.     {
    ! j/ w6 N6 k& X5 j( I
  341.       file=(*p).second;+ o* _# n9 d' h- j8 Z6 V7 b% Q
  342.       free(file);
    2 f/ d1 Y% Q, \2 n; [
  343.     }
    # G# v6 V/ j% M& A- l  Z
  344.     UpdateFile3.clear();  ]# ?/ M. c: I* _6 u
  345.     UpdateList3.clear();2 D( s8 h) J  \* e3 \8 w
  346.   }; ]. \* u4 [- w4 i! P
  347.   if(UpdateFile2.size())  `% Y! S, E+ b' N% u/ ~8 k6 o
  348.   {' b" w( `( Y6 F0 \( t9 Z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , S9 m) w  a9 c: ?# U0 X
  350.     {- a. K, U- k0 w
  351.       file=(*p).second;
    $ B& v  U1 _4 O1 i& }+ E
  352.       free(file);/ u( ~2 K3 x  y' Q- x4 P' H
  353.     }7 R1 J4 g- g6 [1 X, h
  354.     UpdateFile2.clear();
    / F4 h5 b5 u- o$ M  d/ I9 g
  355.     UpdateList2.clear();7 |  N. d$ H( A4 f3 j% H
  356.   }# @, d& N3 e2 J* Y" d3 g  T
  357.   if(UpdateFile1.size())" [% a/ a) I! M. B6 J
  358.   {
    ; b3 H" \  C+ ~. q7 G6 g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# T& D0 |* q$ u- l( u
  360.     {
    & ~: ~# @1 P* f" ~5 j" g" V
  361.       file=(*p).second;. Q: u" U5 x3 D& [1 O: G% j
  362.       free(file);
    ! O7 `# ~4 [$ c7 ]
  363.     }$ z0 ~: c. P8 U, u& M
  364.     UpdateFile1.clear();& s6 s! {) T; V/ _7 a4 \
  365.     UpdateList1.clear();+ N5 X) W1 g5 O; w. Z
  366.   }4 L% {" R" x% r% K- i* }/ D  N
  367. }  
    1 I; ~* z; A" j$ T/ }0 G
  368.   4 m' w4 U0 i; m
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 `) U& R1 z* w( a- A
  370. {
    5 Y' q" \7 Y6 S. D# N3 U
  371.   int c;$ g+ W# c5 i, H6 D
  372.   LPUPDATEFILE file1,file2;
    , g8 V7 k- X) H, m. t/ u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " M- N! C/ |% B( y# q
  374.   std::list<CString>::iterator l;
    & U: H! X. z5 o: p) b
  375. % G8 n7 n9 ~; A/ \+ ]" r6 i8 k, q
  376.   UpdateLocal.clear();; S  L- r- M* X* n' @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / n! l; C; D( m# j* F8 b" K+ m
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 H4 k: l' i. Y2 b5 J6 A6 m" k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 u* g4 u7 t4 V- _& m
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      A4 R# n5 e  ~% C9 c
  381.   if(UpdateFile3.size())
    * O, Y, R- j8 T3 b/ E
  382.   {
    " {# w4 C& q" U. r; `: n2 `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ! c& Z4 p$ Z* s) z1 g% j
  384.     {' F4 X. o0 x$ r1 r1 z, V
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 f( }2 t2 ?! K7 G
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 X0 ~6 d0 p2 ~. j4 {
  387.       {6 ^/ ]+ N! E6 q1 n; O# N
  388.         file1=(LPUPDATEFILE)(*p).second;1 j6 V! x9 K# I5 `
  389.         file1->vers=file2->vers;. S' p8 a- L! V* B1 f
  390.       }
    , E" G. z2 ?, Y
  391.       else+ S8 i0 b3 J6 D, `
  392.       {
    % t2 V! N1 Q) o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; d, f4 m! j" ~: h4 p% i4 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 Y1 v& _: X, l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 L- a/ a2 R/ _- x. {! s
  396.       }
      O( n8 n3 a5 f+ ^, O3 {
  397.     }
    1 d, B3 E7 z) i& M2 y! q9 O( y
  398.   }
    / I0 U  Y3 q8 D" L4 }& i0 G$ C& f9 F
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & b# Z  L$ y* i- Q) R
  400.   {
    : ~7 c: t+ l. n( ]' o) X4 Q9 L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    + ~3 d' y" \* e4 {
  402.     {7 ^1 d3 a1 \3 O0 `$ X$ Q5 |1 x5 u
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 z! r' j4 }( X& O& E0 [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 N" ~' w$ B- g' r/ {
  405.       {
    ; q! C, Z3 ~' {! I: W  ~
  406.         file1=(LPUPDATEFILE)(*p).second;
    : y4 K* I+ X! P: y% o, X2 ^4 _- ]
  407.         if(file1->vers!=file2->vers)
    9 X4 l- J8 Y5 e7 w4 z, D8 B4 S$ }
  408.         {
    ' S6 M4 a( E) i6 I& W1 R/ y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 s/ K, O9 c9 X( q  i
  410.           c++;3 A# d' P0 E) @% V; C5 x
  411.         }8 g3 U* U/ G3 z9 v# i& t
  412.       }
    ( D& H5 ?% r2 c2 V- Z* L
  413.       else& Q2 C) Q9 {* v  _% B5 i6 q
  414.       {
    9 T* R) n4 L4 F- N+ z  h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 @( J& g% |8 x; ]2 s7 x( V: J, J
  416.         c++;  B5 z) r" f( }
  417.       }4 F' Y% u3 c3 e" J) a7 ?
  418.     }
    4 j6 i; B: ^; U: E; [
  419.   }* ?3 d; L! X1 |4 Q# S4 L- _8 Q
  420.   unlink(".\\DownLoad\\update.txt");
    # p4 w! S. U. ?) M+ [7 J4 {
  421.   if(UpdateLocal.size()) return TRUE;$ i2 k7 n! W1 J$ z8 ~* w
  422.   else                   return FALSE;
    * P8 y2 A, R7 T3 h4 c' l
  423. }
    + N/ F5 d. H" e/ L, e+ G+ U

  424. 3 I' c; ^( f- r/ n
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 r7 P6 n1 F7 S" Q2 ?! c! P: J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! i; [- H8 B% {

  427. 7 V5 J* e1 O0 d7 N& N& G; m9 Y

  428. ! n# X4 F: ~6 d/ k

  429. # M" \& d8 r( z8 A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  ?$ w! L  b8 a# D
  431. {
    " H7 {2 C- Y+ x5 e" c7 u$ d) x2 G2 p+ a
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 t* m* v! d5 c7 D% l
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 ]1 S" D% S. u9 ?/ W
  434.   {! i5 k/ ?, A; O4 J% S6 e+ B  G
  435.     char szLanguage[50];
    + |- n5 D& D5 F& I& ?! x
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : j8 y; s6 k& J" L  {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . Y( v6 @# M! a, o; v* o! r0 u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 F' P5 [. r* `( T/ `6 Q
  439.     else                                   m_iLanguage=ENGLISH;
    ! q$ h7 U6 `6 R8 w
  440.     char szRegister[100];
    ' p0 e# V' H, X4 T; O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; o! y) i& m2 X
  442.     strRegsName=szRegister;
    0 M) }% z1 g! L1 r( q) E$ d
  443.     char szPatchURL[100];. Q. q/ g: h' x. d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 C0 v' O2 C& T7 h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 B) y) f$ D- _, Q0 M0 L8 H
  446.   }9 J2 M/ F) E2 ?1 w( N$ J! h
  447.   else' ~0 N: x4 r3 J& @9 _
  448.   {
    : W8 ]3 @. z3 b
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 s4 ?- X1 l$ H9 L! ?
  450.     strRegsName=DEFAULT_REG_URL;8 V& L* \& V5 b
  451.   }8 z9 n4 G0 W* [* w. R3 @
  452.   if(GetFileAttributes("hosts.ini")!=-1)3 r3 ~5 H  _" ^# m' D, E  k, m
  453.   {& x. F1 X7 h0 I
  454.     char szIP[50];
    * s) ?: e7 i9 F3 X  H0 X
  455.     char szDIR[300];
    ; N0 f/ l0 f  m# C5 N7 ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ' `+ D# c6 _% }2 t! m
  457.     {
    8 a5 o& ]% j) h! W% \$ p+ Z. t- C8 \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; _: f' M) F# V! q2 _  }, s6 D( |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 ?4 V' \+ \. E6 t* k5 Q9 {4 ?
  460.       strHostName=szIP;
    * K$ S- J" O( Q8 o7 h9 j% y- a
  461.       strHostPath.Format("/%s",szDIR);
    0 q, A5 b; E; z/ o, {
  462.     }
    1 l4 \/ y/ B8 E$ F" j
  463.     else; H; l4 E( i  w# L' S! \& p' j, o, b
  464.     {; o" ~) x- Y% w$ @
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 ~  k9 s# `, A+ f$ G" p
  466.       {
    * R% x4 s9 H& u+ V) |! A
  467.         char szLanguage[50];# W2 Q0 X* s  X: ]) t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ Z. _; N- b# r# Z% }  U: j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      O$ ^) L7 \/ }0 M" W
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" `6 O! Q, S0 y0 F
  471.         else                                   m_iLanguage=ENGLISH;* r, I* s' e, r! \, S
  472.         char szRegister[100];. m5 o, Q# |! b7 ~. B1 g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 }2 H0 s: a3 I4 V2 p9 |: P
  474.         strRegsName=szRegister;6 m  B' z  z) D# ]
  475.         char szPatchURL[100];
    , }. M& G' {6 h. I0 r6 o! ?5 b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 W( D% y7 o0 O* \& n$ Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' h6 d% u0 _" }+ _/ A" M
  478.       }
    ' ]- I, S9 `3 Q& d4 w% {. j/ G, N
  479.       else# A* P$ r2 E6 B8 F" U! S3 ^. O
  480.       {' `) \4 s$ u+ X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) E0 i6 b7 K, E& K
  482.         strRegsName=DEFAULT_REG_URL;
    2 X4 o3 c& e) ]2 T. q9 Z0 a
  483.       }3 F' Z5 w* ]/ g  v7 A1 l4 F4 f. T  t
  484.     }4 X0 m0 g8 U& r6 ^2 b' o' p
  485.   }# B4 A) B+ v' g
  486.   return true;
    ! n+ Q) f* E$ [. @( z3 E" ]
  487. }
    ) Z; V0 h; f# n) w% s9 g3 u
  488. 6 B2 Z. b7 l, }) r  R: ~! }2 d; p
  489. #include ".\ZLib\unzip.h"
    . m' C; h5 K2 S) ]. O: ~
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 V; Q% J+ J- k
  491. /////////////////////////////////////////////////////////////////////////////' p" A" `, q- M7 t9 i$ s2 s* u
  492. // CRevAppApp initialization
    0 q/ Z# f  D- b! o

  493. ' ~2 w; z5 v3 r* Y8 g, J
  494. BOOL CRevAppApp::InitInstance()
    ) W  ]; U2 e; x$ Q- `
  495. {
    * f9 z" d4 L  g0 ]$ u" b! o) V
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 l+ R4 v8 c1 k8 I
  497. 1 A( b: r' M* I8 |% j' R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      ?" |  a& R2 `: b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# I8 z7 c3 ^8 z2 a
  500.   {& L) q8 z/ k2 ~& x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    # G8 j# q0 ?/ F8 ?% z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 A& g5 }' f' [, o$ ]3 b
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" V( M8 U" G. T
  504.     {
    + n* y" [5 @( M' q9 B* Z
  505.       strcpy(szPath,szPathTarget);
    & Y. I" w8 i3 h4 T8 ?  z
  506.       SetCurrentDirectory(szPath);& Z. e) y8 L: h, v( \9 \
  507.     }9 m& \8 k7 n$ D/ L
  508.   }* X( C& y5 B" \& l% c8 S
  509. #ifdef _DEBUG4 K! p7 J' D6 ]% q8 W5 C) `2 B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . @$ A  @: C$ p' N. b: n1 {
  511. #else& V# q5 T0 I8 l9 s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # b, q$ x2 z+ _6 L* W7 O# i7 @3 H
  513. #endif7 m: n/ u9 t3 a4 ^1 U4 t  b
  514.   {+ P7 O' n' x4 e
  515.     char tempFileName[MAX_PATH];
    " z  F) P- [& k6 C
  516.     strcpy(tempFileName,szPathSource);7 F) W. _7 W& M0 ?
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / _5 r  r. I, ^# c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 d5 v& g1 b( Q( k( S+ `& ^! P
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 ^0 B5 H8 }# z* M, S* S0 p$ d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . m4 H5 g* }* s( N) f+ o
  521.     return TRUE;5 P$ [. N  G6 s- k
  522.   }* N5 f+ K3 r3 e8 @0 Q$ E( m% c- r
  523.   // Nuke 0118: Delete run.exe! x" v. d$ |' p' I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , n4 S9 d4 [# G+ {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! Q! F2 I! C2 S- Q$ a+ t  Q3 b
  526.   if(!ReadCfgFile("Config.ini"))
    0 z; D7 I* b1 U! @1 g' z5 y1 ^) X
  527.   {: t0 |- T" ^3 i+ n) l; H4 H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ f( C. L) J3 F5 O0 J
  529.     return TRUE;  ^! H7 O/ w; L% f" E% H
  530.   }8 T. a0 G3 V) K0 X( Z
  531.   HANDLE mutex;
    6 v: Y2 P, Z" r8 K, P7 z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))6 q7 Y' L( P! x5 B' V  W/ G
  533.   {
    ) A( u$ N( Z( e' l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 [8 S0 f9 Z; C6 ]; U' w
  535.     {
      r+ x2 S+ w; x3 k; U  t
  536.       CloseHandle(mutex);
    4 F9 B# v( _1 v$ q, u
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 @6 [  T! _# Z9 x/ D
  538.       return TRUE;
    / F  [3 {8 x. g
  539.     }
    ( e% T9 X$ o: t$ B
  540.   }  . G8 G  Y% ~$ o3 K5 @
  541.   CloseHandle(mutex);
    0 v. i" {4 `7 ~& U0 ~

  542. / ~" z8 s8 G& u7 o5 y2 n, Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 }! ~4 P2 ?$ n& ?4 l# D- X

  544. , D5 R$ X" T, B; u3 x
  545.         AfxEnableControlContainer();+ }* p. Z. [, Y. D: K" t3 N# |
  546. : o1 o- o. D' l3 ?
  547.   bCanUpdate=FALSE;
    6 b: E, @# U1 h  n  O
  548.   dwStartUpSteps=1;) H& N8 x& K' k- U, T0 \2 X! b
  549.   dwProgramState=AP_NOTHING;
    & e) y, p% V5 s
  550. 0 V: G( g& c) |6 e3 T  e" {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    5 U% |: a2 k2 H5 K& r

  552. % |/ X5 L8 @2 L
  553.         // Standard initialization# [: _. b. s& b0 D# T9 O: y1 F
  554.         // If you are not using these features and wish to reduce the size
    8 G, d8 @( Q7 o. n/ T
  555.         //  of your final executable, you should remove from the following
    0 ?* [" o9 T2 B) W. [. A& T$ n
  556.         //  the specific initialization routines you do not need.0 r4 x0 Z3 d1 ~: N5 h$ ~! S
  557. 9 n' h2 z2 i, h) B- C: ~
  558. #ifdef _AFXDLL
    2 t: |6 X0 q0 i$ [) N. W5 u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - Q# C# F8 m( @+ R: r* Y9 P8 z
  560. #else
    % {+ L( Z& ^$ w4 o7 N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    / ~3 h2 R) w4 N& e8 J
  562. #endif- d6 W2 K. s) L) k# r6 ]8 S

  563. # I; F) s: ~/ G5 f& s% V
  564.   dlg=new CRevAppDlg;  Z# F1 {) W: N9 V4 X
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! K/ i+ A% Z0 {6 |4 e+ P& H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 m/ E/ c, g, g2 ]- r! G# q
  567.   m_pMainWnd=dlg;
    4 q. k/ X- @" n5 o9 A. X" P7 |1 M
  568. 5 K# l/ o5 P7 e  Y9 K8 `! k
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 D$ j9 x! W1 B2 G) |  }

  570. ' y$ F/ Y9 T& C! O. ^. L
  571. //  GdiplusStartupInput gdiplusStartupInput;& S* B( s0 F: ~
  572. //  ULONG_PTR gdiplusToken;# U. J6 U# O% H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( q) j1 Z; Z0 l) `5 Z; m+ @+ p
  574. 0 L$ o2 \: Z5 R" w4 |# S
  575. //        CRevAppDlg dlg;& R3 h& c+ i/ x2 t! U
  576. //        int nResponse = dlg.DoModal();
    5 L  f( z) k! o5 ?9 b, |
  577. //        if (nResponse == IDOK)% I* x" t* H4 \& f
  578. //        {
    0 o9 d* s4 |! v9 v
  579. //                // TODO: Place code here to handle when the dialog is
    ' y1 k. U8 ?$ F- O) B# X* V
  580. //                //  dismissed with OK  Q! D/ O$ o/ a8 t1 m
  581. //        }2 s; L6 J2 w* t8 X
  582. //        else if (nResponse == IDCANCEL)
    ' T9 i: x5 o' z$ ~
  583. //        {7 I6 z* B2 o1 H6 g/ b2 A
  584. //                // TODO: Place code here to handle when the dialog is
    - O$ s+ K, o+ `% d( D
  585. //                //  dismissed with Cancel
    ' f* ]6 I: ^7 J. K, r# k9 w
  586. //        }- ]3 O# K0 h) G8 x8 d  M* A/ G% V6 @
  587. " w7 {" q0 O7 h
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # x( ]; i3 w. q/ R3 A6 l" @
  589.         //  application, rather than start the application's message pump.2 I" T8 `5 z. o1 O
  590.         return TRUE;
    4 q' \# A/ ]+ o, W& i- u
  591. }8 q' M) Q* h- Z* r

  592. 7 a" H2 ^- l* l' T# j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 B# @  z( d9 X2 I$ L: P8 X
  594. {+ \% r6 e. T4 I. N# b( i) t
  595.   int i;
    * U8 u8 z6 S  e- X1 b1 v2 F
  596.   char *szRet;9 Z7 Q3 l4 [: y3 b2 V( B

  597. 4 H. U4 ~' {* @7 i3 N
  598.   if(pSource) { itoken=0; sztoken=pSource; }$ a5 t/ P) X3 k% s8 Y
  599.   if(sztoken)
    $ a3 c/ p% p% {6 s" Q% W2 q
  600.   {
      n8 o( K0 h- o
  601.     szRet=&sztoken[itoken];* S8 x# T0 k# i8 E
  602.     while(sztoken[itoken])2 |; k9 d8 L5 s( Z* s
  603.     {
    - R7 J0 j; s8 q- j8 v( g
  604.       for(i=0;i<(int)strlen(token);i++)/ w6 l* P; R% q* s3 Z4 X) W
  605.       {
    4 C4 e7 _* `; n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    & m) G6 r; V) s" x8 m, }; m
  607.         {
    8 \& l- y0 a$ c5 r3 W
  608.           sztoken[itoken++]=0;6 n7 k& K6 |3 ^2 E2 D7 u# T' n* E) T
  609.           sztoken[itoken++]=0;
    ' @/ Y( h# r5 ~& Y/ {2 {0 U1 y
  610.           return szRet;9 D' b, H9 S0 O2 }: s0 a
  611.         }
    8 V9 {8 E4 C; q  {
  612.       }8 u1 t5 ~8 p- Q% m
  613.       itoken++;
    ( d: _% |' g$ u2 n# Y, C0 ~7 G
  614.     }# I% ^7 i  j" k
  615.   }
    - i/ |+ |! V1 F5 v$ Q
  616.   return NULL;9 c( J, Y; h) q, s8 |
  617. }4 L" ^) Z/ O/ B! p4 p
  618. ! Z" b- [: g+ v6 o& h3 ]5 r
  619. void ProcessProc(long Total,long Current)
    1 u8 W! J4 J  K& c/ T% {8 F
  620. {
    6 V. m' F2 v) z
  621.         MSG msg;
    " V9 L+ O# Z( M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 S' v) Q9 t! W/ `7 u
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' P; G# y' Q2 V, A' X" c+ P% Y: [
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))9 [* ^6 _9 D: a0 B
  625.         {
    * J, `! v; Z4 ^6 x# O& e' z  Q% Z7 F1 |
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . r2 H& K: m$ `8 y
  627.                 {
    $ X9 n+ u' X  C- f
  628.                         return;
    ! A# ?5 l; c0 B' ?$ M
  629.                 }9 }$ i, T7 H- i1 m
  630.                 TranslateMessage(&msg);' {: D& E, N+ a0 V+ X5 k
  631.                 DispatchMessage(&msg);( A4 `( B9 ]0 Y4 c+ o3 I
  632.         }       
    ) G4 i0 k4 v. P0 ?# }  g
  633. }
    . Z* v9 E- x/ K- {$ g. R
  634. & k+ R  z8 d8 H- `$ Z$ ]
  635. BOOL bFirstChar=TRUE;
    + K; V9 w6 s4 }" U; D

  636. ' j; @& f/ j* L  ~* t
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , ]* j+ m+ z% Z7 V
  638. {* \2 d% v: Y( h6 @) X; U- h
  639.         // TODO: Add your specialized code here and/or call the base class) N3 c, N9 E; C' D6 T
  640.   switch(dwProgramState)+ a! z7 F/ {; F: O# ^
  641.   {
    # E) R2 s! i* J5 s& `) I$ o; _
  642.   case AP_NOTHING:8 [4 K- E" J, R  M5 z+ o
  643.     switch(dwStartUpSteps)
    ! @8 l! a4 Z' V) O. `/ i0 j
  644.     {
    8 L& @8 ~: e. \  i- D0 M
  645.     case 1:2 x2 u" _: C" [0 Z' B% }
  646.       {
    2 H/ t6 m$ p  M
  647.         int i;& v$ }) `& a2 m! a6 W% r% j+ @* c+ Z
  648.         CDC *pCDC=dlg->GetDC();
    0 W, D! I; t  m* n
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 {; l9 Y* T" j* A7 @
  650. //        Graphics graphics(hdcwnd);
    1 e3 W8 |2 P5 c$ G) ?9 ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% ?. L! c  n, |3 O2 {
  652. //        INT iWidth=bitmap.GetWidth();
      c8 `/ X: n6 h" @
  653. //        INT iHeight=bitmap.GetHeight();+ u7 I: u7 A. A" _# _% Y% k
  654. //        Color color,colorTemp;1 w, s& _7 k6 E" L7 C$ T
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    : T3 H' o8 Z6 ~: B+ B4 X2 b# O9 B
  656. //        {' A8 Q  F# }6 o. r1 X1 H) G9 H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 {5 |$ _( [- {
  658. //          {
    ; f4 b8 M4 f6 p. ^0 U% F, V2 c5 e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ k& @* F' F' g- ]; t; a- U, d- W
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; P" N4 ]7 F( O+ W
  661. //              (BYTE)(255*iColumn/iWidth),
    6 w# m* v3 W- j
  662. //              color.GetRed(),, {; }* ~8 v) L3 i, }
  663. //              color.GetGreen(),0 \. P5 b: u' C4 X
  664. //              color.GetBlue()));- [* z, H( m. u' m1 d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 V6 F: m9 B/ J, L, \: G
  666. //          }4 Z* ]5 N' k" V% G
  667. //        }- ]' r8 y6 @8 \) I; \: N2 `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# G' P& M& M9 }1 ~' A! H2 C
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " D; n6 [" [/ }5 }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # R" X$ O: N3 a& T" r' x0 O( c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 v' _: M7 }% i' D
  672.         for(i=0;i<240;i+=8)
    - z3 o* K6 z9 l9 z: c
  673.         {# b: J: _4 s. o5 {* ?  M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : [# d' H- X# M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 y& y" Y% Y3 r, K8 q; n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 o$ v, M. Q# {' w7 ^
  677.           Sleep(33);
    8 i0 }, i/ r$ g
  678.         }3 s# {9 L0 f1 A$ \* q2 v& w
  679.         Sleep(1000);- t/ q* r. _: y/ G4 c
  680.         for(i=240;i>0;i-=8)
    ) u$ ?. @3 O5 h1 L1 N8 J; N
  681.         {" M8 h8 x! m) f# J' t' U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ c) h7 o6 q) F$ h6 E4 v" F2 `( J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ H+ a& e% H% G: v0 T- L% H- I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 k( L6 D4 g) t4 `; S# r9 h8 }
  685.           Sleep(33);/ V1 I5 l0 }" o3 Z
  686.         }
    ) P) `' S. R9 Q0 f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 T- Y3 G9 ]/ u7 J
  688.         dlg->ReleaseDC(pCDC);5 w8 R3 b$ y5 [# J# q
  689.         DeleteDC(hdctar);9 H/ Q" M  O0 `( g, W0 t  \
  690.         DeleteDC(hdcsrc);. H7 X# G2 g+ E9 v) v0 r
  691.         DeleteDC(hdcorg);, N( b7 L4 d6 s+ C7 A# S$ m
  692.       }6 \2 o3 t1 ~' f0 o: ?* L- A$ r0 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' m' c8 G) ^# o, L% T$ C, V% B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + x9 @' {. U9 x' m" m$ `2 t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , P8 K0 a: B# @3 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) w0 D6 K* W* t! l, |  W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) e8 y1 c) j) v" r' x
  698.       if(!Dn.Connected())
    * W8 O) O5 [$ [4 Z
  699.       {, f/ H  {# l0 x1 ?! u$ l
  700.         dwTotalFiles=1;
    , \9 z& R8 Q; {
  701.         dwDownLoaded=0;
    4 r/ l2 z2 w% o& z
  702.         bSilentStep=TRUE;! {  L5 j+ \# k" `5 ?- p7 C
  703.         bCompressed=FALSE;: ?5 I4 [6 W" Q  T: U# E) a7 b  C
  704.         strExtLocal.Empty();/ d/ R. c( I' C' m' V" M% w( c
  705.         strFullName="readme.txt";# u& G. N' Q9 L; Q# F
  706.         dwProgramState=AP_CONNECT;) ]* o4 ^% w1 J. m
  707.       }
    9 Q- p, C1 Z: f( `7 \) M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / n$ h: k9 {' r
  709.       dwStartUpSteps=2;
      s; ]1 c3 u: j; a( ?
  710.       break;& Q6 t. i# g  f( E
  711.     case 2:
    6 T: a: L6 m0 n3 u. U: J8 o
  712.       {
    * A: C5 I2 n% Q3 P, A- `. F1 n- v
  713.         int iEOF;
    ' R% w+ r  {, {: F1 L; y* F
  714.         FILE *fp;0 `7 g  Z5 {5 t! _, ?6 s
  715.         char szString[512];$ w5 j3 A2 \5 ^/ B. a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 k- q2 d* I/ ~9 p3 Q& a& K
  717.         if(fp)
    ; l- j; j9 J4 p# @5 R5 N( G# V- {& n" Y' [
  718.         {
    0 R% G9 A" b! Q: K& o" T
  719.           do, d# Q6 j9 B. `6 ?' H
  720.           {
    7 _  l) S$ e* `$ X6 N+ b0 x
  721.             iEOF=fscanf(fp,"%s",szString);+ X  N. O6 O1 C9 j4 Y
  722.             if(strlen(szString))
    - B( C; \) B8 I# t$ x+ H
  723.             {* G- a3 y6 A+ e
  724.               if(bFirstChar)
    . p3 ?; S" Z5 q' h' `/ m% |
  725.               {
    6 E2 w& ]( b# K6 W4 U# J
  726.                 bFirstChar=FALSE;
    ( z1 _+ J2 j, O5 v% \) `& l# h- S
  727.                 bConnectIsBig5=FALSE;; _$ m; A, ^9 b$ T6 R: c3 Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( N! f8 S% W# t& d, }3 I
  729.               }
    ! b' t. n6 A5 _+ m
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 c/ m2 b( [/ f: P: Y  {9 a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / Q0 g  D+ l+ J% u5 I( C0 b" ~
  732.               dlg->m_ListText.AddString(szString);8 V/ J2 S9 O2 }% q( K2 U* G" n
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( I4 E$ S2 k" g. C$ w
  734.               *szString=0;4 t5 u) r% W' D! r7 T
  735.             }. ?( o: P" h6 o! A
  736.           } while(iEOF!=EOF);# }" B6 @" \% n3 Z( e
  737.           fclose(fp);
    3 a& w. \/ z  W% q4 L  D
  738.           unlink(".\\DownLoad\\readme.txt");; u* |- a) @( q7 o. c: m
  739.           dwStartUpSteps=3;
    + `: ]7 L( }! t* S0 @5 X( X
  740.         }
    + N3 R3 Z7 D7 u
  741.       }
    7 N. N2 q( z& v' Q% p
  742.       break;3 q3 g# M) ~, x1 c# J
  743.     case 3:6 Y/ z8 f6 l, y& R4 g
  744.       if(!Dn.Connected())/ H$ a9 G6 j0 c! F" |7 S' H
  745.       {' s6 t* t+ D) N, l, z1 C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 ?& s# _3 ]$ E. c; ~, C
  747.         dwTotalFiles=1;
    % ^8 G- A- c/ \1 W5 r: k/ s* O1 X/ O
  748.         dwDownLoaded=0;5 U2 a* ^! Z6 u
  749.         bSilentStep=TRUE;
    % I7 h' \8 h. e  B- r6 L# S' z% O7 o
  750.         bCompressed=FALSE;& E9 c7 `0 c* l6 }/ v
  751.         strExtLocal.Empty();
    0 H( @( |0 P; I+ W$ Q8 Z
  752.         strFullName="checkversion.txt";$ V* W2 ~' X% a5 k8 A5 T  c6 I
  753.         dwProgramState=AP_CONNECT;3 |8 M) O$ F7 B+ C
  754.       }2 l  t  }- G7 Q" U  T  Q" {
  755.       dwStartUpSteps=4;
      g2 s$ x3 E& s  H+ o( P: l
  756.       break;
      y7 ]  q: L9 D+ Z2 W7 e
  757.     case 4:3 S6 J5 D1 {% N% O% E) L$ g5 i
  758.       {
    7 U) T! X( ]5 F0 b: ~
  759.         FILE *fp;! d- d0 @3 D9 ?4 e- O8 g! m
  760.         char szString1[128];0 `8 X; z  M" Z/ S1 {7 m
  761.         char szString2[128];5 I. P7 `. C- @& t7 o6 K3 T
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! }& b& b( m9 H' ~2 `
  763.         if(fp)
    * A8 J- y  B/ T7 m6 |
  764.         {, @0 B0 e* {, G2 @, {2 C8 X
  765.           fscanf(fp,"%s",szString1);8 G7 t& `/ U$ C8 N2 o
  766.           fclose(fp);
    , Z% h8 j: J7 [5 a0 q) D3 c
  767.           fCheckVersion=atof(szString1);, ]% S5 c$ ^5 f
  768.           fp=fopen(".\\checkversion.dat","r");1 B7 Y% b; i9 |9 _0 u
  769.           if(fp)
    - y* G& ^, J! d: V& f
  770.           {
    , R, S$ G. e3 x4 D
  771.             fscanf(fp,"%s",szString2);
    + }6 ]. B. b) ^* I- H
  772.             fclose(fp);% y: V2 B% l2 O; m1 T0 C
  773.             if(atof(szString1)!=atof(szString2))+ o# M- T) `; ?
  774.             {
    ; \# T' _! F( J& [0 Y5 c1 d
  775.               if(!Dn.Connected())
    0 Z5 X1 X- E7 _! X, H
  776.               {& `6 y, O$ Y" n2 g  l
  777.                 bFirstUpdate=TRUE;& q8 w( u( _) C0 M# w  t
  778.                 dwTotalFiles=1;& [! o- i3 u' K! [. E" o/ }# p
  779.                 dwDownLoaded=0;, r2 X0 j3 t; [4 x2 s5 p
  780.                 bSilentStep=FALSE;
    2 H  C1 G& g1 u
  781.                 bCompressed=TRUE;8 _. Z+ l7 Q) e5 K* I1 Z+ [
  782.                 strExtLocal=".\\DownLoad\";
    + e7 _. U8 q: m- r) J5 h
  783.                 strFullName="update.txt";4 ~% T# |' ]% \' H* I
  784.                 dwProgramState=AP_CONNECT;  ]( G- L' z+ Y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( t! C/ i. O6 g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ {5 x; X" N& p8 ^/ x6 m3 m  B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  P) \4 b0 Y: f0 z" d

  788. ) T$ J4 ~8 A$ j. `$ c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 C1 n6 r, @) [( E3 F9 i
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ i! p5 }8 Z% E) y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 l. C- t  ?, S. m- v/ O
  792.                 {/ v# R8 t! d( Y; s/ e( ~
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( k' }% e3 A& I$ u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");5 G+ l  e$ L/ B) D1 ?
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & d* ~: r3 d1 y, n4 f. P
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  Y- E' e/ k/ f  `: d
  797. 9 C2 T+ H# {. i& O" C% m* m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " P- m$ l  b8 o9 X2 t8 q0 G/ R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 e4 l1 W9 R7 u3 ?: j/ `8 E; v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      z- C7 n% `* H
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + M% F" l8 @6 Q7 G' q7 a
  802.                 }" }; Y0 X9 m$ R+ b9 ~
  803.                 dwStartUpSteps=5;+ y) M# P. q. E4 u
  804.               }; u4 c% j% m! m5 ?  g: b- \
  805.             }
    7 Q2 h* k$ H8 e6 K
  806.             else2 H$ f3 t: l: {, M
  807.             {0 i4 j( r# h, T
  808.               unlink(".\\DownLoad\\checkversion.txt");- d% i! G0 c! ?. `; _* T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# p+ S% b1 Y, X7 L9 ]" s1 P' s
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* A3 E# N8 J! @, c. X; M. t: b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 b7 i7 q* K6 z6 _

  812. 7 L6 b5 S  G8 s3 m& @2 D/ u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( {- `0 A- k* K0 r: m: n
  814.               dwStartUpSteps=99;
    % D) s$ _2 w, Q( s5 r6 }
  815.               bFinishUpdated=TRUE;
    : Z5 J$ G: D  }$ C5 f2 _2 V
  816.               bCanUpdate=TRUE;3 x0 ^8 l( R8 b" b* `+ S$ \& h1 J
  817.             }( M+ Z& v% g5 {& S
  818.           }+ ]7 E3 `2 {2 X5 ?; [) n
  819.           else
    + h* n7 h. d2 ]. V1 Z7 a
  820.           {
    2 A  |8 @5 J0 b# c  w2 h
  821.             if(!Dn.Connected())
    & `3 p3 K0 W. U4 e7 E5 W. a2 C
  822.             {7 g" u( H2 C0 d, L3 r
  823.               bFirstUpdate=TRUE;4 P- H4 U9 [; j/ G/ {" m2 I: ?! _5 K
  824.               dwTotalFiles=1;; T& X$ s) w* C9 D
  825.               dwDownLoaded=0;
    " }8 S5 O# N  ~4 G
  826.               bSilentStep=FALSE;. i9 _. |! g2 ~: r" B8 A
  827.               bCompressed=TRUE;
    # @/ s' g, O- F. B5 X
  828.               strExtLocal=".\\DownLoad\";
    6 B, \! f% w5 K
  829.               strFullName="update.txt";3 F: t! E  j. |; R) U7 l
  830.               dwProgramState=AP_CONNECT;
    1 ~5 h, N" T/ m5 I8 O5 z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 t  V" W4 A- l6 c4 o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 ~! W9 \# ~. o3 _' ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* R4 N8 r7 x" b! ?' x* d& k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: j$ e6 O+ d% ?" B2 {# q! B
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ d0 A6 N5 q& ~- l4 x" v$ }
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    8 Y  W( s- p6 X* s  {: M3 P: `; A
  837.               {( y+ G& c" s, a+ q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ M$ v5 _% ^( h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) p9 H8 r% }* F8 D( M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 b# n3 I/ Z3 y0 j; q( c
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. I+ H, y: i+ P7 Z4 w
  842.                 3 B" B/ C# X; Z8 c2 d& ?7 f4 O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 D) k2 U9 Z+ o: C# C  F+ \
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : ^8 d/ b  F" w, ~
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: t6 ]/ A8 E" j, V
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 v* O% i0 ]4 R# \3 u. w
  847.               }
    % @  R1 n& J! j* K- p8 ]
  848.               dwStartUpSteps=5;$ x# W- S( I7 c' ^
  849.             }
    ! y2 i. s. |# @' e3 C0 P+ u# x
  850.           }
    ) A4 N6 }* n2 y: m; l7 w; r' P
  851.         }  X  h& K4 S% I! K
  852.         else
    0 s# o; P# t, f/ ?! Z
  853.         {
    9 ]) t3 t. n8 u& B1 U
  854.           dwStartUpSteps=3;
    $ T+ I0 B( p' g. {/ t
  855.         }
    " c5 l  W4 v- U+ D) T: y+ P4 A/ Q
  856.       }! C. b- S6 b. K+ p! F4 D5 N7 Q
  857.       break;; z" F5 E4 ]! S: I) R
  858.     case 5:
    0 {. |) h+ o* @% b/ L
  859.       {: k9 H1 T% y* h7 I, U
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- L6 g, {; y: M# k4 E# z, q
  861.         {- K2 Y# q* x7 O/ D0 r
  862.           int opt_overwrite=1;4 D0 {0 J( o' x2 ~  P0 K) r( ]
  863.           int opt_do_extract_withoutpath=0;
    / o# C/ j6 Q3 i8 u9 v( _
  864.           unzFile uf=NULL;% f% G' {' b3 L$ g  ]
  865. 8 @- m% Y4 k$ b( H1 p3 B$ ^- A' T
  866.           uf=unzOpen("Wsa.zip");
    2 t  {; e4 o/ A; t( m$ y
  867.           if(uf)4 P; N/ p, f9 s8 M2 G: c: F0 N
  868.           {4 X4 O; ^9 h- c+ R$ e2 n- L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);+ j* \. k3 q. F" N7 ?& h; Q+ z/ m
  870.             unzClose(uf);
    9 r" X% q1 t6 A1 ~) ^
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 O6 x3 z: G5 `1 K% R9 j$ o
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % W& a5 n% ?3 s/ o; O4 ]. I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");6 i3 T, {/ b7 h1 R8 h, T* z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ F1 q0 x1 u) N) Z) h
  875.           }
    - `2 w! i* y$ \3 W1 l
  876.           DeleteFile("Wsa.zip" );
    , l# S1 v8 J9 L3 ^. h6 f( X4 ]
  877.         }/ ~8 N4 n7 ]4 X8 b; e8 g% p) ~

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

- d+ l6 ]/ j, e- t( U7 s5 U3 o# F2 r* q

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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