找回密碼
 立即注册

CSUpdate.exe源代码

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

: m: f6 Z: V: z* J& i6 m
  1. / RevApp.cpp : Defines the class behaviors for the application.  Y; t$ M7 `& B$ }3 {- x" q% u
  2. //, m0 _. V, L9 ^, I0 g5 l' {

  3. 3 h; j; Q/ ?8 r+ }) L6 O/ t
  4. #include "stdafx.h"
    " S+ [- L9 O* H" _2 ]" {
  5. 8 n' V6 q7 t/ [) {! |; M# Q
  6. //#define UNICODE6 Q1 I. a" |! V# h+ ~8 S
  7. //#include <gdiplus.h>
    5 ]9 o. o4 Z& c7 A$ t
  8. //using namespace Gdiplus;1 o/ }! c0 G2 y
  9. ; ?2 L- J( c9 y$ w; {. @
  10. #include "RevApp.h": X% {: f) e3 J/ c" V2 n: U9 J9 x5 V
  11. #include "RevAppDlg.h") |+ E! _  t( {2 u

  12. 8 O7 N1 b/ P6 d) w
  13. #pragma warning(disable:4786)
    ; u$ @( p+ k# J) P; E8 s, j3 a
  14. #include <map>
    7 U. n- K  C9 O& u
  15. #include <list>
    9 T  L% y' {8 K# a
  16. #include <direct.h>! q; P* Q) }* Y, O' u) Q
  17. : {$ |3 y! w& k" l+ O1 F0 E, X
  18. #ifdef _DEBUG
    , r9 f8 Y8 v8 W9 E, ~3 i
  19. #define new DEBUG_NEW8 Z$ s( C" F$ K6 ~. K3 H
  20. #undef THIS_FILE
      _3 X7 K. ~" Q' F
  21. static char THIS_FILE[] = __FILE__;
    2 N+ I! Z3 ~( c) \' `4 z
  22. #endif
    4 s! c  a' B' D+ Y) ~
  23. #include "SkinResDef.h"% Z" p9 M) Q6 _- r
  24. #include "ChangeBG.h"
    ! z3 w% f. R$ ~1 V( q- u
  25. #include "AFXINET.H"( L! V) s' w+ x  h1 X$ C
  26. * A& n8 [9 \4 [8 ?& _2 N8 {
  27. #define TRADITIONAL_CHINESE 0
    6 E8 c( W9 U) j2 R
  28. #define SIMPLIFY_CHINESE 1
    1 y0 W* Y4 \. b, t) D# t
  29. #define ENGLISH 2
    2 e: `6 b9 }. L6 P9 W
  30. int m_iLanguage = ENGLISH;
    8 o+ g1 b- E* f9 [  U1 p
  31. /////////////////////////////////////////////////////////////////////////////. X& _" Y: |% C) e- o. u, u  N
  32. // CRevAppApp
    6 q3 _. |3 h# M& f2 t

  33. 2 U" P% T4 k. {' |3 K6 \7 r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ; ]: i, \; h. D1 p
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 T' [5 V1 ^$ V1 n/ R0 t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 f: e  W+ J. ~" ^# I/ j* G  X5 c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( R& I+ D* q' Y* a/ C/ G, g. T
  38.         //}}AFX_MSG  j9 {, c; e. v/ @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 N+ u8 }3 e' g4 U, \' z
  40. END_MESSAGE_MAP()3 k( M: E2 Q" b

  41. ' i7 W+ z6 _$ u" h3 Q7 }5 R
  42. /////////////////////////////////////////////////////////////////////////////
    & T& A% I8 Z# q* A5 o
  43. // CRevAppApp construction) j$ S$ \4 K/ L: Z+ a) B+ U

  44. 1 w+ }  U, D" ]7 M1 i# J
  45. CRevAppApp::CRevAppApp()
    ! l, s2 c* w7 X/ N( a+ T! Z4 d. |! R
  46. {
    " ?2 D$ R2 ]9 P, s+ ], H6 ~
  47.         // TODO: add construction code here,
    - T$ r( i$ L; p3 m$ i
  48.         // Place all significant initialization in InitInstance
    & M6 b% _' e) c8 Z7 I
  49.   bDisplayIsBig5=FALSE;
    ' j# G2 O) u6 Q; l) s# H3 u
  50.   bRestartUpdater=FALSE;- ]/ x- x7 z% u8 u; Y
  51.   bFinishUpdated=FALSE;
    - P$ }5 M  r+ S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 _# F4 ]" ^- _, N9 b1 `  m
  53.   InitChangeDataBig52GBKS();
    . d* M* w. |% ~
  54.   InitChangeDataGBKS2Big5();; j, V7 V# ~, L9 K, S( m
  55.         //" @# {+ v& s3 ?5 G
  56.         bClickRunExe = FALSE;1 F! j( W+ \: ^4 Y. E9 I
  57.         //
    ! Z* D8 C) o# t9 f& Y4 I
  58. }7 V0 D/ L: h- J# I: ~8 _

  59.   c* P8 ^  ~3 a* `  I
  60. CRevAppApp::~CRevAppApp()
    . n: s' Q' a% t  V' k9 _
  61. {0 A" n& ?2 H: Q1 m
  62.         // TODO: add construction code here,7 C6 h, _& f. E+ S
  63.         // Place all significant initialization in InitInstance" s; W' W2 n7 }
  64.   EndChangeData();, M! E! a8 S" X1 i6 A
  65. }
    ) |  i. z3 l2 H$ v* k

  66. ! A- `2 h4 ~. r- y. x  B4 z
  67. /////////////////////////////////////////////////////////////////////////////7 R7 O0 T. F) W) ?; Z& r
  68. // The one and only CRevAppApp object
    0 X+ t! t6 N- d, ~/ r3 q
  69. & i* e# S# }9 I  f' F
  70. CRevAppApp theApp;( [* G4 a" I4 M. ?, D" Q' c
  71. ) P+ ~; Q; [, a  O! Z4 a; C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): A5 l9 w: G# H# \, C
  73. {
    & P. a* k0 r* A* \5 J  m/ t& Z
  74.   int iEOF=0;
    3 J; l' e# s- b1 w
  75.   char szTempName[MAX_PATH];  r$ u0 ~% v1 D" h) U
  76.   *szFileName=0;( r+ F4 Q8 K8 o! f" Q7 m
  77.   iEOF=fscanf(fp,"%s",szTempName);# X5 X9 d/ B" M- q1 a3 I7 N
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & J0 ~0 |8 H8 |% w, Q
  79.   {" I$ F1 k8 @$ u+ k
  80.     strcpy(szFileName,&szTempName[1]);
    5 O: ]* y$ {  v9 Q+ _- P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % W& n. t0 C" X( o1 V7 A
  82.     {
    , a" l% ~6 p- [. m& @
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 r; h3 T0 t+ o% B8 ]! c4 U
  84.       strcat(szFileName," ");
    4 w9 J6 o+ A! Y. K4 S2 T. @
  85.       strcat(szFileName,szTempName);
    & M( j2 R7 K- U6 Y& m" g
  86.     }
    7 C- X; j/ Y( A! k5 Y. N& r6 i
  87.     if(strlen(szFileName)>=1)
    / ~1 b: W9 Q. v$ l+ x( t+ @! U" @' G
  88.     {
    3 x" U2 }1 B' z. Z! W0 g0 E
  89.       szFileName[strlen(szFileName)-1]=0;2 I9 n3 _9 K/ O- {
  90.     }
    7 {. y3 f. E  z  l- }, y
  91.   }
    ' T6 ~( A! @& K
  92.   return szFileName;" {1 ?7 ^4 x# t5 b& ?
  93. }
    1 k' c$ R# P. _/ S; O5 p4 f0 b
  94.   G8 F$ }2 o. M  N6 V5 a, b* W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 q* N, S0 \& E
  96. {
    7 ]" V5 m  B1 ~7 r( D% o, u
  97.   FILE *fp;0 W% _9 H/ f6 m% r- y: E! @. h
  98.   char *key=NULL;
    8 x! @; c" q  {$ J9 g2 Q" J' i
  99.   char version[MAX_PATH];7 A# P1 N$ n: f8 G
  100.   LPUPDATEFILE file,olds;
    9 E, w6 a! B+ G. d, R2 z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 c+ H8 m4 D/ c" I! l

  102. 4 C( i8 k9 {5 O& Q1 ~3 t
  103.   UpdateList.clear();1 J  C1 j4 M4 U4 u
  104.   UpdateFile.clear();! l9 |  V1 M2 A' o8 e  K* ^8 `; V
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 G, n  y8 k- u5 e; M' T
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 t* X' e' e+ M' i  N
  107.   fscanf(fp,"%s",version);& Y5 A: G: V% u6 [0 m5 _5 v. a2 \
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 y7 p3 ~: j/ x3 M
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - I! ]" F, h& e& ~" K
  110.   {
    7 f1 X, G# o, g2 ^' T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ J- i4 Z+ W" Z- V1 j3 y: `
  112.     fscanf(fp,"%s",file->path);
    : L6 T% u& a% c9 t4 r$ n$ o
  113.     ReadFileNames(fp,file->file);3 N! U5 E7 ?8 \+ o/ I: |0 p" k) n
  114.     strcpy(file->full,".");
    3 A% J" W! |2 O2 x5 R, {$ L
  115.     strcat(file->full,file->path);3 N  w' c% _) i  k
  116.     strcat(file->full,file->file);1 c: {' ?7 S  M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( N% }# |6 p/ [/ G
  118.     {
    8 v8 q) L+ z6 Y1 c
  119.       file->vers=(float)atof(version);* Z2 o% J/ {" z6 K
  120.       UpdateList.push_back(file->full);3 P/ f* o& C5 \( L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; l6 F$ j5 O5 P+ i1 h
  122.     }
    8 Z$ A, Y7 l  c
  123.     else9 F  I1 f7 i2 o" y
  124.     {$ s9 c( H1 E* R) I3 z' x
  125.       olds=(*p).second;: {7 N; x7 e8 r+ }- K2 M1 v
  126.       if(olds->vers<(float)atof(version))1 T$ h5 Q/ @4 m9 A* \2 }/ D' }
  127.       {
    # e5 Y( b! p# U/ L+ D- B- ~
  128.         olds->vers=(float)atof(version);$ k# H2 l, O. X6 b( ]3 @# Z
  129.       }
    " b7 E6 y; s* O% T, K
  130.       free(file);0 M7 }6 X, G+ I# [' ^1 x8 T) X% C; E
  131.     }
    4 Z/ I, |/ N. ?6 ^- h8 A2 `% r
  132.   }; z4 t1 A: ^. R( c
  133.   fclose(fp);+ ]* r" M! r" \: w5 u  e
  134.   return true;+ @" B  I! g7 T; |2 _
  135. }
    & a+ R; K* e* Y; c; N8 k4 d

  136. 0 K# ~2 E* B. P7 z3 y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 Y% o, h- n' D7 @* M# G1 |, E/ x
  138. {. m, I3 C2 ]! j2 C' i8 t5 r
  139.   TCHAR  szFull[MAX_PATH];/ k# ]4 U7 H+ c# K* d4 T, I
  140.   TCHAR *token,*inter;- F: J: e3 C2 {
  141.   *szPath=0;
    / s3 x( R* `( X7 F: p" e8 k
  142.   strcpy(szFull,szFullPath);
    ! ~& o7 B6 h, n! c, N
  143.   token=strtok(szFull,"\\/");
    4 _: I2 Y! R7 _
  144.   inter=token;
    & N4 ?; T3 I8 g
  145.   while(token=strtok(NULL,"\\/"))
    7 n  m  x( o# q# r1 l, r
  146.   {
    : S* s7 {  E" ~! ^& u
  147.     strcat(szPath,inter);+ g3 y/ b; @! o. T# l; _- }
  148.     strcat(szPath,"\");
    5 L# `3 ?1 ~  M! M" g8 y
  149.     inter=token;
    ! X6 B  O* L$ x- C# }( e( m, U
  150.   }0 i$ l+ k$ S6 E% ~/ Z, t7 C/ D% J
  151.   return strlen(szPath);
    2 ]) ]7 K- X0 I6 T! O% L
  152. }$ P, b* F0 K& `3 ^- _
  153. % l' A8 F6 Q' a9 P. c3 q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + y$ F9 a( g6 }$ f& v
  155. {4 ~9 d7 p- R$ ]' |3 a) S4 \( l$ m
  156.   DWORD attrib=GetFileAttributes(Target);
    % B; `) ?# E- M, D* V, x$ B
  157.   if(attrib!=-1)
    9 V& d! q1 [( Z( c7 i
  158.   {
    ) a; \$ O) Q0 Z  Z& A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ l8 u: `/ k0 U/ S
  160.     {
    9 E- [2 L( ?2 E" }5 c0 R
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);/ }- A0 a4 l4 h! T/ w* h# A
  162.       SetFileAttributes(Target,attrib);
    ; z) @% }/ \0 m* t( ^0 [
  163.     }' }7 W: w0 E; A7 P. V7 j
  164.   }; H# r# b1 f" c; _  e
  165.   CopyFile(Source,Target,Erase);
    3 l: Q( x* T1 h/ o' N' l
  166. }
    , l6 S- y1 x! Y% g# Q( J9 O

  167. $ Z. M7 [- U+ a
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 T1 I* `+ x. ], P7 c% s
  169. {* \. P* R6 U# K5 n% S
  170.      FILE *fp;* T8 [8 Z# [% Q8 `" l1 d( F3 q
  171.      char  szBuffer[8192];
    1 B; u6 g: z5 n( ?* r$ }
  172.   va_list  argptr;& [- f7 G5 E& {) a- F

  173. 6 |2 u/ O8 ~) H
  174.         va_start(argptr,message);# X. [4 L( y" `) F/ v' j. v
  175.         vsprintf(szBuffer,message,argptr);
    7 K: ~' z2 N! n6 t( E" D
  176.         va_end(argptr);# t. n" M! \$ T0 R
  177.   fp=fopen(FileName,"a");
    ) w; L7 m/ M$ q/ L
  178.   if(fp); o& C7 T. `  \' M6 @- s
  179.   {: n3 F9 h' p2 \) _7 y4 z& V5 S
  180.     fprintf(fp,szBuffer);
    , L2 [, q2 |: [+ l4 P& N1 b2 P
  181.     fclose(fp);, F8 ~. {' `& V* W  d
  182.           _flushall();  j6 y# w: I8 }
  183.   }
    3 k; Y" E* d7 [' y
  184. }
    7 T9 V- D5 \+ \& t: H3 E, L

  185. ( C, ^$ ^$ T1 e. `2 P
  186. BOOL CRevAppApp::Fclearf(char *FileName)3 O. {! E4 N* l1 F+ d0 h
  187. {: O1 P* E# _2 C: v5 M
  188.      FILE *fp;, L2 o6 [1 w9 c* z0 Y
  189.     DWORD  attrib;
    , O! A/ U' U2 r
  190.   attrib=GetFileAttributes(FileName);
    1 Y2 q' H8 p, W3 {0 k$ s& h* M% V
  191.   if(attrib!=-1)/ \% m+ `% w2 i
  192.   {: N* I& s/ A% H5 d6 B% `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 \, s+ K# p, F. v) t  i0 D
  194.     if(!SetFileAttributes(FileName,attrib))
    0 J3 B$ y1 y( O$ E& @
  195.     {6 a# s; j% x7 @: g
  196.       return FALSE;3 p0 ?1 d5 Y9 D7 Z0 s/ ~9 v
  197.     }
    0 y4 K4 G# ~6 p, |
  198.   }- K: H) X7 j. ~1 s) v! ?# b) R2 x
  199.   fp=fopen(FileName,"wb");* {! ], O6 }( b" c* _
  200.   if(fp)+ A2 Z0 p0 d- i+ K
  201.   {
    ! d8 a) z: K' X8 @3 ?
  202.     fclose(fp);
    ' b% |* y+ K) U) P& J
  203.   }
    7 z  Z( N$ ?! [9 B- \
  204.   return TRUE;
    / s* z+ e- ^0 R" a7 v3 j
  205. }# u  |7 k+ e$ p8 N9 A3 c7 B

  206. ( _" a' \1 z$ j- H6 t
  207. BOOL CRevAppApp::UpdateLocalVersion(void)* \" i! B# x  L% F" W6 ~9 L1 d5 E) {- H
  208. {8 Z$ Z# q! d9 }8 w
  209.   char filename[MAX_PATH];$ V0 e9 {. N7 Y
  210.   LPUPDATEFILE file,olds;
    ( m% S/ Q2 C7 g
  211.   std::map<int,CString>::iterator i;2 W; |! V+ O2 a) x7 I) p8 I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * m8 U5 u. e1 }9 q3 h5 y6 @
  213.   std::list<CString>::iterator l;
    & c$ ~* W# A: c' c: o
  214. ; h/ s8 X% K8 F
  215.   if(bFirstUpdate): `5 G+ c& R( c; j' b
  216.   {5 j$ {9 k9 t# Y
  217.     dwCurrFile=0;
    1 q! S4 ]; s  P+ m
  218.     bFirstUpdate=FALSE;
    9 X3 s5 m  c6 u1 `  p# i# b1 K
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* T4 m( ^8 T" `) V
  220.     {
    . G9 x' i4 Y( t2 F0 }% I/ v
  221.       dwTotalFiles=UpdateLocal.size();
    1 V" E, M7 }" x
  222.       dwDownLoaded=0;/ F. N" Y; n* `
  223.       bSilentStep=FALSE;
    - i% x8 z$ ^1 W9 t$ q
  224.       bCompressed=TRUE;5 Y2 f! F" J. ]" i1 q, w  x
  225.       strExtLocal.Empty();- X  c* X5 ^" v; t: v
  226.       strFullName=(*i).second;
    2 W& E9 _7 j8 |: Z2 B) t
  227.       dwProgramState=AP_CONNECT;0 E& w" x/ q  a3 M( L. i; o
  228.       return TRUE;
    3 j0 G! e- U0 O7 K- S
  229.     }
    3 ]" }3 |: V/ w, O& J) l
  230.   }! N7 f0 x( L% q, y1 m
  231.   else if(bRestartUpdater==FALSE)
    " W2 R# W6 o( m4 e3 c
  232.   {
    7 f6 F- i, J8 W% b- c. ~
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ G4 \* F, ?' S+ d6 \% o* H- F
  234.     {5 S8 F2 R: i1 l& J4 o% D
  235.       file=(*p).second;
    # `% B* _: \6 U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + |7 _3 A! P2 W, b3 X
  237.       {+ W% @5 r4 P6 _/ l
  238.         olds=(*p).second;
    ( {3 L. }1 Z, v  X8 B8 a9 q+ x
  239.         olds->vers=file->vers;( S' ^* b& {8 R( J& |
  240.       }+ ?3 ^4 s* ]; C: V. B  ?' U2 N
  241.       else5 ]3 {2 R, O1 v) v# D
  242.       {
    8 d# L, u: F. i: m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 l6 S- _7 K, p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  C" ~8 O  W, ~2 W: T4 B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 ?/ u" [2 B" y7 l4 p. c
  246.       }
    : y9 _/ K9 A/ d7 H$ t, e" [8 J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: Z: Q& k) z# G- X: E1 g
  248.       sprintf(filename,"(%s)",file->file);! M0 ^& l: e$ D1 B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 h5 A7 o( v' ]) i1 P( S2 V
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) l' L3 {8 I9 ~9 @9 {  X
  251.     }: {  P5 d: a+ R) R8 a6 Q4 u5 h
  252.     dwCurrFile++;$ G2 `( D0 u# S9 o2 @( w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ b7 j' l2 X4 R! A& E+ ~
  254.     {
    , b, l/ ?8 T( O5 H' ~
  255.       bSilentStep=FALSE;) N8 f1 O+ x+ ]- m& |4 _* M
  256.       bCompressed=TRUE;
    1 C+ C4 Z" M  Z' [3 Z
  257.       strExtLocal.Empty();
    3 G2 J0 L0 D2 k
  258.       strFullName=(*i).second;
    9 ]$ q0 c* O3 p/ g4 f  M* q+ V
  259.       dwProgramState=AP_CONNECT;3 D7 I8 L% M- I: m, ^9 B" l
  260.       return TRUE;
    8 U; C+ `& V: g+ q# D6 q
  261.     }+ w/ P# k7 ]9 s" D$ t+ s+ c% z- s
  262.     if(!bRestartUpdater)$ B! E/ K  r* ~
  263.     {
    8 J0 J% N$ p! L( o
  264.       int iCurrSize,iFileSize;+ U) K: [0 V9 N5 d$ ~; k
  265.       iCurrSize=0;. o$ }+ G" i: I, g! S( j. [
  266.       iFileSize=UpdateList2.size();
    ! P% c1 I- `/ B' _: F% C  C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: \6 o" F# r7 ~" n* b; D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
      D3 H# G5 u' q! p+ S: Y0 {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ H; H) U+ y0 p2 f
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 I5 i: ?% A7 k6 t  a( Y9 }
  271.       Fclearf(".\\update.dat");
    ) |! s: w5 o% b5 a; i0 G/ S+ d
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ S. L6 t9 Z; ~6 P5 r$ q! r5 X- \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), n2 `) p8 {& N: Z8 h+ t9 r" k- v
  274.       {8 X7 b7 Q- [; t+ O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! ]) X9 U7 W! {& a  t  B5 f; e
  276.         {, ?  X$ E" o+ e! ]0 g1 t( I% H2 r8 |7 ]
  277.           file=(*p).second;
    7 ]4 Q6 G/ Y, C$ v  o! Z: s
  278.           sprintf(filename,"(%s)",file->file);6 Z4 F) [9 \2 f3 w' J( C( Q0 X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! z" u9 D; b2 _5 K9 ~2 f; v% m4 F- d
  280.           iCurrSize++;# M% K" E! N' K, z- \7 Q9 L+ H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 z! H2 y4 B: X8 E3 i
  282.         }
    ) ]. a" B  N! h* k4 ]
  283.       }
    ! R9 q3 e2 r+ W7 ]8 I: ]
  284.       unlink(".\\update.txt");8 z$ t. o5 @/ J2 w5 R6 O: a8 a+ |0 o$ u
  285.       unlink(".\\update.tmp");! O1 B; s0 f, q
  286.       Fclearf(".\\checkversion.dat");
    4 @: s' d% m" E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);! v0 N( Y, N2 k# t
  288.       if(UpdateLocal.size())
    % Y0 y  f2 C0 C4 J7 q& P& x
  289.       {8 P6 ~# G  R4 F. B
  290.         UpdateLocal.clear();/ E& I5 a2 E9 G2 W1 n6 m
  291.       }$ M6 ~! d' i! q1 M* H
  292.       if(UpdateFile3.size())* g) G$ t1 ]7 X! x9 x3 @3 {$ u
  293.       {
    " N! W- R, E4 l% A$ L2 b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& l7 {" ?, E  _0 Z1 n7 i
  295.         {
    9 H* l5 h: ^4 f3 n3 I
  296.           file=(*p).second;
    ! Z* H8 K+ |: R
  297.           free(file);
    2 N" ~6 ~# l0 R6 J* G" ?+ x
  298.         }* |6 n! l' z1 Q) `
  299.         UpdateFile3.clear();* T2 z; }2 V+ Q
  300.         UpdateList3.clear();; H9 B2 H) _% @  ]1 m
  301.       }
    - L. ]( r+ _: H) ~) `) b6 K! i4 n
  302.       if(UpdateFile2.size()), p: k- b4 K7 C9 j
  303.       {' H! z0 }$ q% m, k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * o3 {- `2 R! g9 D( ?
  305.         {
      m  P& B% v1 d# B
  306.           file=(*p).second;6 q" ]1 t" P( d2 S& B3 c) H1 w: B
  307.           free(file);
    $ B+ X  K% V5 M8 a- A( A
  308.         }0 R  l# W% z( I( p+ y: m0 s2 x
  309.         UpdateFile2.clear();- l+ T7 e3 }0 y8 V
  310.         UpdateList2.clear();
    ' |  N9 h/ O! }& |
  311.       }
    ; V; P/ M6 H( Q6 `, m: }
  312.       if(UpdateFile1.size()). J: T6 T7 z4 I' L. O
  313.       {& ~3 Z( N# }! e& \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( ^6 A+ Y0 K4 w5 y
  315.         {' C; r% D: Y* O  p
  316.           file=(*p).second;$ R- }# o- w1 j" z
  317.           free(file);
    % ~1 k9 v- n$ J/ k
  318.         }$ \' |  I) L8 z) H; O
  319.         UpdateFile1.clear();* t& f; M, v; N3 y
  320.         UpdateList1.clear();1 r- p; B. v& P
  321.       }
    7 z. W0 l$ A- y% Q2 B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 X2 X1 \; B1 I/ o
  323.     }
    ) k) F, a, A, l3 _
  324.   }
    2 H; U' k4 j. L) b( n, k
  325.   return FALSE;
      x" H6 d, \( k- O8 m
  326. }4 R$ _- V! B0 n% ]5 J* X

  327. . ~0 Q: r0 e5 t% i. h3 W% Y
  328. void CRevAppApp::ClearAll(void), ]; h5 q. V! q$ ?2 w9 x5 j% t
  329. {
    / m: p2 s( z& \2 d! D0 j
  330.   LPUPDATEFILE file;3 R4 h7 i* m1 E# A1 {5 I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( T/ Y7 ~- {' Z) j# B. |" W! D

  332. % ~' D6 r( c" n+ I( F* r" [
  333.   if(UpdateLocal.size())% \) t1 u( u5 j2 o1 m
  334.   {0 {8 E4 N1 q- x. B
  335.     UpdateLocal.clear();9 H0 b% Y7 W9 Y/ `- Y* M
  336.   }$ G5 p: u3 y: |' N  P% T* _6 u
  337.   if(UpdateFile3.size())3 X6 a2 O& L8 I& N
  338.   {& s  B5 b9 j. K" p9 i& q3 g
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 J: g8 Y7 P- Y/ [. m. W
  340.     {
    : T( u2 c' o4 D. L+ d2 U# X
  341.       file=(*p).second;
    - D3 j! A9 k, ]: @
  342.       free(file);
    ; y2 A5 Z/ Q$ c: m! \5 W7 [$ Q
  343.     }
    : B+ d  @4 {6 |/ Q' K% \
  344.     UpdateFile3.clear();: }4 [* F# U. m4 M& Q  o
  345.     UpdateList3.clear();) j, I5 b4 [7 @8 ?) p0 g, s* O. p
  346.   }8 }8 s+ D9 ~; v. M9 `" S: J: R: ^
  347.   if(UpdateFile2.size())
    ( W0 j6 ~" Q" X+ a
  348.   {0 S& M2 _: k$ h4 v! f, u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), A1 h- Y3 K0 \0 Y, T: I4 `( h
  350.     {& F$ \& _: |% E+ w; T7 V& f
  351.       file=(*p).second;; L' t( ~$ `2 p( m3 I( u  ?+ K; O
  352.       free(file);
    * m/ K, m/ r& |9 r& S) f/ p# |6 ]7 i
  353.     }
    * |  {" K+ F+ I" T* C! R
  354.     UpdateFile2.clear();
    6 t- E+ O# K3 @  ]- R. U* U
  355.     UpdateList2.clear();
    : A: e3 d/ F( X8 |" N0 W7 `
  356.   }/ N8 E( b9 m% o9 i0 u3 O
  357.   if(UpdateFile1.size())
    " N, P; U! s2 @# f2 v" g9 |* ?
  358.   {
    / A0 |$ [5 _6 n9 O" k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 g9 Y  v  L0 f) z
  360.     {" t( ?5 f" n. Z5 E+ T
  361.       file=(*p).second;! m6 j0 I! g5 y& T9 d  j
  362.       free(file);
    * b3 }/ J4 ?& \# G0 _1 Q/ F! J
  363.     }
    - @& Q, ^! e. o/ \6 P# |! Y+ f
  364.     UpdateFile1.clear();7 G" g! J4 Y5 T/ N- b
  365.     UpdateList1.clear();+ L  k" Q9 @( D! l! i' P
  366.   }
    8 u6 Z3 U4 h/ l: X# c
  367. }  
    ( ^9 F( F1 d( L: E- n
  368.   0 A$ F) n: A# q
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 I: S- X* C$ U3 K
  370. {
    ! d9 J. p* J: M# d* A
  371.   int c;
    ; \8 G$ f2 o) z( n9 l
  372.   LPUPDATEFILE file1,file2;' W1 X+ V4 {, t' z" G7 r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 k+ E0 L6 l* n3 Z
  374.   std::list<CString>::iterator l;! D! g- n9 K& {  u2 H3 N0 v# J1 l. Z
  375. ) d& b0 ]" m: v5 G" y  v: q5 v
  376.   UpdateLocal.clear();! I% {5 Z; r* e* [% h$ x
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 a1 u; j) [+ C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      a- ?0 b8 w. s7 V$ k9 O! x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);4 z* G1 {6 R, o! k) a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) Q- x) z' `9 `' n  H* ]4 W
  381.   if(UpdateFile3.size())/ w# A& _, f% E* b) O9 C6 \
  382.   {- Q0 c$ c& d3 C/ j9 q& r( e/ j
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ r; T9 K2 L9 H, y- v8 n* E8 N
  384.     {; Y. }0 T( K; {4 l9 K; B9 D
  385.       file2=(LPUPDATEFILE)(*i).second;7 R( b% h( X) F; n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  Z9 J0 y/ b; p: H9 K
  387.       {4 O) W& O# V: D# }
  388.         file1=(LPUPDATEFILE)(*p).second;
    4 |" q( I$ \, y' n) J
  389.         file1->vers=file2->vers;
    ! y6 g' j, t& H4 v7 k+ s
  390.       }
    " r$ J$ U3 _+ Y+ A/ p! k
  391.       else
    8 L4 U5 R8 y* E
  392.       {
    - {0 B5 N$ V  [3 q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: Z0 N- u% [( Z2 D, y& u+ o* Q, N
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));4 V( X  [* r* V  A* F7 C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ U' R$ t* c8 |9 Y
  396.       }2 h% K7 g+ a" @: u
  397.     }
    8 w  D7 v; J2 l6 X" ]
  398.   }; g* n, ?- ~& J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # d- k4 H+ z, s; M3 ~
  400.   {  T  p! |* y% a% [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - B# c* z- k6 T1 U6 |" |/ x2 v
  402.     {
    + P: `7 H2 Y3 n+ _
  403.       file2=(LPUPDATEFILE)(*i).second;* r! F* V- Q1 E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 c' N1 J4 q1 [* `8 e
  405.       {
    + d0 R& U  I3 ^& r1 m5 {# J
  406.         file1=(LPUPDATEFILE)(*p).second;- Q$ y; p2 ?5 |' A# E# B
  407.         if(file1->vers!=file2->vers), N5 z. b3 |; Z. y) @
  408.         {0 J6 R: q* J! g, Z$ c" m1 p$ Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 _( Y/ b- P2 ~/ W, l" Q3 A  v
  410.           c++;
    + {* r& X, E  _7 X8 ^, f5 G
  411.         }
      o1 `8 z5 Q% @( _
  412.       }
    9 R. ^5 _2 V& P0 {4 }) C1 @$ Y% s5 f
  413.       else
    5 M6 M) G9 Z4 y, ~. Y) |
  414.       {
    9 G( }7 O+ p4 Z  s' ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & c- p7 {0 \' j4 @
  416.         c++;
    2 \- h1 A5 q4 D7 A5 u
  417.       }, ?. d& }: c0 S, E  t
  418.     }
    + q9 J+ W4 \( |! o  o
  419.   }; o, D$ ]3 _/ t; C% U5 d1 `
  420.   unlink(".\\DownLoad\\update.txt");
    2 t& ?% v/ {9 o" O9 x
  421.   if(UpdateLocal.size()) return TRUE;& i9 q7 r: R# c# R
  422.   else                   return FALSE;0 Q8 {+ Y, D: K7 W
  423. }3 s( A* e0 ^( s, O4 @& h

  424. / [9 [- T) w; f, y9 l6 e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 p% U9 H- u; O1 C; I" S' x& k9 J" p
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * J6 k% {7 K# p
  427. ) `9 P  f( u+ \$ C7 U& R2 y" F: z
  428. 0 a5 X) y3 H7 {" h; ?- |
  429. ( [4 p4 I, B; A5 A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) D, Y6 Q9 i( Z2 b3 h8 j
  431. {: i7 ?6 s' Z8 \- P1 x8 E' ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & t  R! j/ M$ [$ U9 A* E! p& _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): Z/ P' C4 q7 e7 ~( h' b, c
  434.   {
    4 I# J! ^0 Q) O- {* j: v  `
  435.     char szLanguage[50];( V/ x5 @0 e, G4 Q0 j2 l
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 {: V" z: N! D  O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + J1 o6 V$ b* ^0 ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 c1 @- Z7 w4 }2 a& O4 a
  439.     else                                   m_iLanguage=ENGLISH;, ?* B' F' N* J
  440.     char szRegister[100];
    % T8 q: r4 s% J. J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 T& j" x; B1 I
  442.     strRegsName=szRegister;
    - |3 s7 z  B; H: H5 ]
  443.     char szPatchURL[100];
    ! E& h4 S7 s. I+ W
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 k, N& I; n6 a& n: L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' s! a! L" M" k- l5 B. u1 ?
  446.   }' v) M; S9 x1 R7 u
  447.   else3 P5 z6 s3 s- f" x
  448.   {
    3 R) U5 P6 K1 Q$ p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 {/ Y( [6 a  o( l* Z
  450.     strRegsName=DEFAULT_REG_URL;
    6 ~1 l  k! b) I$ K
  451.   }
    ) Y! m1 X# m# J5 d% `
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 @5 u: p3 N3 \: p6 T
  453.   {
    ( C: Q# ?- c8 L9 x. c7 F% ~4 |! K
  454.     char szIP[50];
    " o, j- T. t% D% Z9 d8 O
  455.     char szDIR[300];
    # o8 p; `' |8 V( s
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). ?  U) ~6 y3 x' c. t3 U3 m/ `6 S% i
  457.     {* r+ |8 D9 X, ^# R' L, w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 H0 y2 [. }3 R' u" [5 _5 ~, e$ L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 K  H$ d/ L1 y( O4 b+ a, ^
  460.       strHostName=szIP;" ?* C* h/ D4 c5 `
  461.       strHostPath.Format("/%s",szDIR);# `5 o9 r7 m9 w
  462.     }$ S% \: A* z2 ^5 x
  463.     else
    ( B) m7 R* |, `4 E: }5 U5 d
  464.     {
    # ]6 O3 g; e/ ?$ n: U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % s: d2 b& P9 x" k! S0 e
  466.       {
    4 g- ]! ?' Q4 e: d
  467.         char szLanguage[50];9 Y, E* `. }2 p0 H( [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 s0 g0 m& w& _, C+ G3 Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, I/ m( h# v: j/ V  x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 I- {( j4 H( N6 ^
  471.         else                                   m_iLanguage=ENGLISH;
    2 w3 k+ L: E- l8 q
  472.         char szRegister[100];- k3 e( I3 s/ K. ?
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 d, J' T) B+ @8 p5 G# t
  474.         strRegsName=szRegister;2 l$ v, E% d$ ]9 Z0 T0 O
  475.         char szPatchURL[100];8 a5 h0 B$ ]  w7 B: E0 z! ]! d
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! h- P; v! ]; x5 w/ }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( f7 w  c" [3 a) ~7 `7 j; Z
  478.       }# |2 \. K9 ?! z. I0 O6 t/ |
  479.       else- A$ T* g. P- j, A3 f- n, q1 D$ ~
  480.       {; ~* a$ k  A: c# I- `5 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! [) S! K5 S2 B6 Q
  482.         strRegsName=DEFAULT_REG_URL;
    2 w$ q9 l: Q# i9 R0 W
  483.       }1 |6 _1 R' E7 B
  484.     }
    4 [7 w- c: ], c* L2 {
  485.   }
    ! L+ n$ D! y$ O9 ?4 M
  486.   return true;- U( e+ y4 N: S" o: S" A, O' ]
  487. }
    ) {% b; Z7 s: H. f0 r

  488. * p7 C5 o  O; R* s8 i
  489. #include ".\ZLib\unzip.h"
    1 m( s& P0 H/ K" a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ E& E; V, d- J( q  D7 s2 F
  491. /////////////////////////////////////////////////////////////////////////////
    : o3 P: ~) r! p7 S
  492. // CRevAppApp initialization
    9 `6 i, `2 X& i
  493. * ~9 z. V$ o. _( }( f7 J* e
  494. BOOL CRevAppApp::InitInstance(). ^% \6 b( i0 E
  495. {% K6 a- L* w+ p# x5 z. s; j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 u, s1 R! X+ K" B7 u1 v

  497. ) ?, G2 ?* i1 |. D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 m2 a3 B/ K( Z& R3 p. M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ! }8 c5 @* r! I0 |% j
  500.   {
    0 B& h0 ~( b* N0 o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * V1 Z; d; ^: b5 X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ) ]4 O- W7 V, T% i" f( ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( w* O. s9 `+ K7 u) }" t6 B; Q
  504.     {
    6 a" v( g/ R  t4 S+ |7 `
  505.       strcpy(szPath,szPathTarget);
    - K0 Q' n0 C' E
  506.       SetCurrentDirectory(szPath);
    8 Y9 e; V& L8 n) D
  507.     }  B, _: g! F/ j: C) V3 x
  508.   }2 k+ S3 s! Q: ]6 c0 s) P# P; M
  509. #ifdef _DEBUG
    & |: ^0 h- T5 X$ M3 w1 v/ i; N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / ~+ G' I/ k6 L, F8 P' m! ?
  511. #else
    % ?! C& x: S7 @: P- s8 `
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , i* ~+ K$ h  |* F7 `6 _
  513. #endif
    : G- y' r  O. y( X4 m
  514.   {
    ) h9 t- ?& w0 h
  515.     char tempFileName[MAX_PATH];
      \/ _$ i! S2 s+ ]9 S: ]' O
  516.     strcpy(tempFileName,szPathSource);9 A& I( S4 M3 J' |3 M9 F
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 j( P8 I! M; s2 K: l  v( J1 I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      W. _2 m: N: @
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' [* J1 ?5 N6 B7 Z" F! z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* L3 `4 J! C7 M4 @
  521.     return TRUE;5 A0 v/ f: I+ I, C
  522.   }
    . D! M$ @. ~1 Z; N2 b
  523.   // Nuke 0118: Delete run.exe
    6 J2 E- s; g# }5 V' F0 c
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 Y, C4 a6 ~2 n. i
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) r/ C' }0 Y$ L+ r
  526.   if(!ReadCfgFile("Config.ini"))* N+ k" F) Z# V4 P: E9 P
  527.   {
      Q; u6 I# m* a( C7 l- [" Z$ A0 d6 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + Y3 Q4 @3 `: R* V6 N
  529.     return TRUE;
    9 @. D9 D  u' N& ~7 d% p
  530.   }
    - D8 X3 j% S2 u0 i! T2 t8 p
  531.   HANDLE mutex;
    ; [  m- x  ^+ h. z- ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; r+ a8 M5 E7 J2 l. g7 ]
  533.   {
    3 I/ R5 l! [9 T( _
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 ?+ I, j& ?' ?0 P+ a. P
  535.     {$ _" l  T& T1 n2 A0 H! [
  536.       CloseHandle(mutex);2 l$ N4 A2 x' _
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 g2 _) O$ x' j% H1 w; c# i. d  I, C
  538.       return TRUE;
    : r2 l0 C) k# a7 p$ h8 j$ ~* H+ H
  539.     }
    " ~  n# k! r" q5 D6 r% h4 h6 v
  540.   }  
    ) }2 Q# M1 X. G9 t
  541.   CloseHandle(mutex);
    4 u. L+ P: }7 f# Z

  542. / Q# K1 a5 i# d& Y' U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 l# \) M" ?: ?
  544. # V; B- u# j  ~6 m$ R
  545.         AfxEnableControlContainer();$ h! B4 {4 d0 E7 p! P
  546. ) T# ]6 K: d( b
  547.   bCanUpdate=FALSE;& n3 P4 V) E. z8 D3 c% _
  548.   dwStartUpSteps=1;6 I8 `. h; }; c: R& r, Q
  549.   dwProgramState=AP_NOTHING;; ~% `' H" G  A  g

  550. % P4 t6 }6 V5 I0 t$ b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 f6 F' _6 n6 B3 t, a) F

  552. 4 e& M# t: G. b- j
  553.         // Standard initialization9 u6 J  K5 i9 c# S# k4 G$ C
  554.         // If you are not using these features and wish to reduce the size
    1 M  X+ [; k. w( J' p+ P- M
  555.         //  of your final executable, you should remove from the following  l% h+ W7 x& O; T
  556.         //  the specific initialization routines you do not need.
    : K7 m/ H3 a: v6 d& E# K' X

  557. 8 p. p* ~7 ^4 i) n/ i- }
  558. #ifdef _AFXDLL1 i2 p5 E1 V: B' z- j8 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " ]3 J/ n" ]% a5 v/ g- q3 L6 m9 `$ C
  560. #else: S0 ]- p3 H0 F' M2 z" F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ r+ m/ I2 a) |" ^0 O2 g9 O  H
  562. #endif* E: J- g5 W% I4 O
  563. ( n" r" I: @  c! k1 N* V7 y1 j8 U
  564.   dlg=new CRevAppDlg;
      J! s9 e- t" d. o) U
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ t  _& G' z, u/ q6 P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 e8 H! g& ~. e# d( `+ l
  567.   m_pMainWnd=dlg;* w6 e( {3 z, k  G) {3 |

  568. 5 ^2 @( p9 H' G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: A( g+ ~1 W/ O( ^5 Q, W
  570. ! i8 Z$ @+ R7 X( n
  571. //  GdiplusStartupInput gdiplusStartupInput;/ r& Y! F9 X- n
  572. //  ULONG_PTR gdiplusToken;
    " C8 e. d! [" `5 m6 W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 \; N4 }' B; k' G2 [) B& U
  574. , r" `6 e4 K/ Z* N
  575. //        CRevAppDlg dlg;7 u# b+ q( f( ^7 f
  576. //        int nResponse = dlg.DoModal();6 C8 {: t& h. j" t+ }2 f
  577. //        if (nResponse == IDOK)
    $ J0 E) H1 g" B) F+ N
  578. //        {  U0 o4 B7 N. ]+ m
  579. //                // TODO: Place code here to handle when the dialog is
    5 T# e+ d, P7 s9 O
  580. //                //  dismissed with OK) b- ^; M% B# J! l1 X, u. s  v4 n- ^
  581. //        }
    ' W# Q0 b8 S4 [+ W
  582. //        else if (nResponse == IDCANCEL)% W$ e1 }  s9 Q# z# U% E
  583. //        {
    0 P/ t' l" b7 u3 w! o
  584. //                // TODO: Place code here to handle when the dialog is
    % @! Y9 J* l* D3 N; n4 q7 o1 q
  585. //                //  dismissed with Cancel
    - m" H; \2 U4 e" z8 v. Y
  586. //        }; |3 w7 w# d$ y) [" H8 \/ ]

  587. : [$ m+ ?. e& c% P
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 z( O" h4 B/ p' f. }' \
  589.         //  application, rather than start the application's message pump.
    1 X% A" v" S( c, \' G
  590.         return TRUE;2 T$ t- x8 ?: u. o
  591. }5 L6 e9 i6 q% o
  592. 0 k% F" s0 h) o4 g" v; h3 L
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ; j/ [' f6 A2 T9 e
  594. {$ k. o0 C" p& T6 Y& n$ ~7 e' _
  595.   int i;' y2 [( x/ ~6 C9 Y' c& t
  596.   char *szRet;
    - G* U, z- v! H, ?0 l
  597.   F) l% c% L0 m: i' k8 S9 j
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 h) O! Y7 a$ x, s* [' C; o1 ]# m
  599.   if(sztoken)
    : v% i' l7 h7 C  |
  600.   {3 N4 E5 o, W$ v
  601.     szRet=&sztoken[itoken];
    ; W" \. o7 L* E4 c
  602.     while(sztoken[itoken])
    7 V5 h1 l3 v7 z* Y- d( `, Y
  603.     {
    7 I+ L6 J8 d3 n1 w, B: i
  604.       for(i=0;i<(int)strlen(token);i++), q" a- V+ d2 J* Q: x& c
  605.       {
    / `/ S- j$ S0 j2 Y, Q0 L; l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 a. j7 h- ]. d9 X( ^
  607.         {
    9 T- \5 ~) i7 W- n; D2 W; j7 c
  608.           sztoken[itoken++]=0;
    ' _" V$ [: l% v6 C
  609.           sztoken[itoken++]=0;, w  _( n# w. j4 O
  610.           return szRet;# V6 a! f7 j) A5 Q. q: W
  611.         }
    1 H, p% H( W9 X  j) s
  612.       }% t1 e# c+ O3 [- q7 k
  613.       itoken++;
    7 F! C: l1 f" D7 h, V8 x
  614.     }
      M: y. ?9 Q7 V6 L8 K1 f
  615.   }4 X& I9 q4 R6 n. |7 ~1 f
  616.   return NULL;
    * U  y5 e! ?. n1 P/ G
  617. }
    : ]5 s7 m& M$ M, e4 r

  618. 7 w( T/ C: C5 o
  619. void ProcessProc(long Total,long Current)* R* S0 a' e: Q0 X0 e& O9 o$ _
  620. {/ [( j0 p; E! r9 d
  621.         MSG msg;
    ) f5 T, V  c3 H# j1 M* T1 b0 z4 b6 I& x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " t2 E1 x( ^( T" x1 N" S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . T. D) O! \, E$ W4 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 H  R% E+ l. [4 ?
  625.         {' f& c& N: P! x3 [7 d5 J% r
  626.                 if(!GetMessage(&msg,NULL,0,0))2 B% b. c& s% q/ y
  627.                 {. y4 R7 B' X+ i" B. V3 Z
  628.                         return;- |. q* v  S4 w  u
  629.                 }& m* U6 q- o- E* X
  630.                 TranslateMessage(&msg);
    0 V  ~$ t, E$ e  [
  631.                 DispatchMessage(&msg);5 S+ [* p& w9 t; ^& {
  632.         }       
    9 e+ E; }8 U" s2 |; n
  633. }
    " G% \( i( n' K$ d

  634. ! A0 g* H( e* N: j) E$ C6 S. S
  635. BOOL bFirstChar=TRUE;8 C! g# K/ P, X1 W
  636. + B3 v1 H# R' F( z  e! I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ _$ b6 ~$ U, A! N7 ]6 }0 v
  638. {
    % v  t% Q+ \% V* U7 Y1 w
  639.         // TODO: Add your specialized code here and/or call the base class
    ! K, U6 u6 ~! {5 x; N+ s
  640.   switch(dwProgramState)
    % U/ P1 e) D' c, D8 h5 _
  641.   {" q" O: U% y, M0 O9 ?; @# T
  642.   case AP_NOTHING:" K% }1 g8 _% V( B# a" p0 S
  643.     switch(dwStartUpSteps)6 k6 p: y, J& \; j# j8 d
  644.     {
    : t$ O* y% ]0 |9 t
  645.     case 1:9 b; s/ C% y( O" [" G
  646.       {
    4 Q6 l' @! f: V! [5 |# s
  647.         int i;. z! o( D0 N9 I3 `9 w
  648.         CDC *pCDC=dlg->GetDC();
    2 f  s" j4 z3 u8 S' k
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 T, V) q+ r- k8 Q5 z, P
  650. //        Graphics graphics(hdcwnd);6 i: M/ m( M6 ^  p' G0 G! u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");( ?) s2 I2 b2 J* f* P/ c6 E' N
  652. //        INT iWidth=bitmap.GetWidth();
    # E* ]% [: `3 j+ E' _
  653. //        INT iHeight=bitmap.GetHeight();2 G7 b+ G* z$ f! c, Z
  654. //        Color color,colorTemp;- @9 Y1 w  L( A6 Y# ~% Q3 J# n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)7 h3 P2 p( I6 [4 V( P0 a
  656. //        {1 q6 e; B) i' B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)+ z3 a1 b* N; k2 a
  658. //          {6 B$ s  Q% ^# p2 X$ h* j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 V, K; U" o2 E( r) ~! v! a0 }
  660. //            colorTemp.SetValue(color.MakeARGB(3 h; M% V  M, o$ B# L
  661. //              (BYTE)(255*iColumn/iWidth),' e: @3 j, O9 I  F3 }- p- G
  662. //              color.GetRed(),
    : D% N" o0 P3 [- j: C
  663. //              color.GetGreen(),8 H. F$ c- x; H& C0 }
  664. //              color.GetBlue()));
    9 ]( N" G. R, V: P- D2 }8 g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 M; M. Y- a& h  I
  666. //          }
    ) U, E; N* ?( \0 H/ \+ X& m# T1 [3 d
  667. //        }2 a7 W# t1 q2 T# f" {; ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);! y8 f0 Q! O- D) P6 V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( @6 N+ d* f% t* C( i  R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # Q& M' K2 D% N# }8 [/ ]
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 o' O6 W# m  K; A4 s
  672.         for(i=0;i<240;i+=8)3 G6 c( V( o) L" }- ^0 s* U# u, }
  673.         {2 ^& V% V3 [; U
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 K. M* ]7 w3 G9 p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # |8 v; |# ^  D  d6 s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- L9 w) X8 k% g; O. k
  677.           Sleep(33);
    3 I4 H0 Y( L; m9 h  T9 r1 r
  678.         }
    . O' D+ |; v# l, m% ~
  679.         Sleep(1000);! `% g) J8 b) F$ b) T( K
  680.         for(i=240;i>0;i-=8)4 x3 K1 O; O. `$ z& ]
  681.         {0 F/ u+ z+ W' u, E. R! F
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; J# x1 P  C5 P" A( i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : k6 c! u8 q5 J% C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. c2 D# n; n8 V/ g! L/ Y
  685.           Sleep(33);1 f6 b+ _0 N& G5 y* K4 `
  686.         }
    3 L2 Z$ [1 d' \6 C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 o- Q- p! m6 D
  688.         dlg->ReleaseDC(pCDC);
    " o  x4 m1 k9 n+ [" [" D" H3 Q
  689.         DeleteDC(hdctar);& u/ ^1 m6 M3 G$ O
  690.         DeleteDC(hdcsrc);
    / N3 \$ p' Y, V
  691.         DeleteDC(hdcorg);
    . s  Q1 z9 `' f
  692.       }
    6 ]0 N: F3 m8 T4 n
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 o: q5 Q9 R1 l$ O" b, J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 i# X- c2 s% Q- T; _- i' I" j: s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    . l+ b+ N/ Z! e4 ]/ t& L9 r8 }; _' G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ S. |0 [- D5 q+ O* h8 ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 S# O& s# g0 t1 V! p
  698.       if(!Dn.Connected())  }( o* T' w# [  H6 Y% d+ U$ r
  699.       {$ `. ?2 |1 v( [- N" w* s6 G; e
  700.         dwTotalFiles=1;- L* O* {9 g) f, W3 a+ P
  701.         dwDownLoaded=0;. a- O3 x5 o( m) n* I6 V: U& A
  702.         bSilentStep=TRUE;* N$ s1 z# l- V! S4 k$ A) b- Z( I0 G
  703.         bCompressed=FALSE;' p" u9 q. C" _  d( ^( }1 w
  704.         strExtLocal.Empty();8 B* @) }+ J+ v9 u3 ~6 m2 G
  705.         strFullName="readme.txt";4 R9 g( z5 B( h2 @) H
  706.         dwProgramState=AP_CONNECT;
    4 Z& Q$ R5 Y4 L7 z! m, i
  707.       }
    : {7 ]4 g8 `+ m: |% `) |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      U! f' s3 E1 T3 a" Z+ I( C& N
  709.       dwStartUpSteps=2;
    . D! {2 o0 U& ?
  710.       break;6 m5 D. S0 P, S* Y" T0 N
  711.     case 2:  T, V+ b- A4 I! L$ e% C0 |. G
  712.       {& i) P9 Q" i# S  A2 t+ s& y
  713.         int iEOF;, j: s& R+ |# P; D3 ?; q
  714.         FILE *fp;' P, |0 q' u4 R
  715.         char szString[512];
    : D, k  r7 S! y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 @& c* M+ c5 c4 v9 N9 P
  717.         if(fp)
    - O; r  @1 A% r4 E: S
  718.         {8 m! R3 w; l4 I4 g
  719.           do
    % c" W# \/ B# b9 ~/ m7 L* Y  x
  720.           {
    / ?$ R4 F* |. S1 t  W
  721.             iEOF=fscanf(fp,"%s",szString);
    ; c5 W; a; a7 X1 ]8 c+ S
  722.             if(strlen(szString))" h; ?% }$ C6 Z5 R& z
  723.             {/ N. E& {7 r+ H* B( w$ p
  724.               if(bFirstChar)
    2 t3 P4 {8 m8 |+ v* Q1 \
  725.               {
    ' e* X3 s! j( ?' K# |
  726.                 bFirstChar=FALSE;3 {2 R1 Y6 P: P- o; T( a: ]
  727.                 bConnectIsBig5=FALSE;
    % x: ]  V6 p( P: J$ }: b6 Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( w) t& R4 x- c0 c* |. Y
  729.               }
    . ~0 e) T2 v( Y3 u1 [% O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ }7 q3 Y# a, E3 g6 s
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / T% T! J8 m" i- O. {& Q8 ^
  732.               dlg->m_ListText.AddString(szString);
    9 l" Y+ F! E5 U! u: P: E. `
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 Y0 I& P) ~- U; V; R: @1 m
  734.               *szString=0;5 r! L. e: ?6 X& e+ A  W* y, |8 `
  735.             }
    8 x7 W; m( _4 @$ y  E3 Q
  736.           } while(iEOF!=EOF);7 o4 |: h; ^+ B0 N5 G% @9 w- d& [5 x
  737.           fclose(fp);
    ( L' K, L$ R, P5 b
  738.           unlink(".\\DownLoad\\readme.txt");' }$ d. S( l2 ~5 _3 D5 I
  739.           dwStartUpSteps=3;
    + z- y! M/ T( z7 r! }
  740.         }; w9 c5 }; r$ z& c, F( W" W& W8 H1 R
  741.       }
    ) X3 k, k% Y( v- z
  742.       break;' k! G3 b/ F5 l7 X) t
  743.     case 3:. ~3 ?, b& ?9 i3 c- y
  744.       if(!Dn.Connected())( a: q+ x0 L8 w& B
  745.       {
    + J: y" B1 l5 G1 c/ ]3 N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);5 ?2 h) Z2 L/ r9 e- j
  747.         dwTotalFiles=1;
    - Y. H1 ^/ @( d  D* k) F% }
  748.         dwDownLoaded=0;
    2 x0 I4 j, q; {( s
  749.         bSilentStep=TRUE;1 B0 t) a, f8 G  a: F! P! @7 L
  750.         bCompressed=FALSE;  @9 M6 x! O& R7 u7 e' }
  751.         strExtLocal.Empty();
    , d0 `! ^$ y6 p- U, v3 W2 Z. L$ B0 c9 B
  752.         strFullName="checkversion.txt";
    - [3 K) J: Y# S* G
  753.         dwProgramState=AP_CONNECT;6 s: U; w9 h, {' e
  754.       }
    ' S+ O  u; W9 c
  755.       dwStartUpSteps=4;
    ( C4 s3 f. `5 M: a* C0 x" z5 h# n
  756.       break;
    5 t0 k/ B  l8 M( C: H8 o2 h0 f) N
  757.     case 4:
    " R, k& |% @- u# y- c: p" l
  758.       {
    : Q$ s5 B! s. E! W* ]/ `0 G
  759.         FILE *fp;
    * L; I, ~+ s) f5 o
  760.         char szString1[128];2 l! j* `0 J% @' S) g- g" p
  761.         char szString2[128];
    1 a1 L! @9 L5 a; n1 Y; N  ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 \& h9 ?4 @6 U  E: T
  763.         if(fp)
    ) _& K7 t5 q5 {# g. M$ a, {$ U  [" i. g
  764.         {2 h5 \. u5 R( R3 P' ?
  765.           fscanf(fp,"%s",szString1);
    ' u* m8 S0 E1 C; {9 j! n
  766.           fclose(fp);
    ! R/ X1 f- z3 t1 C. R( @# c
  767.           fCheckVersion=atof(szString1);
    / C- N  P$ F& B. p
  768.           fp=fopen(".\\checkversion.dat","r");( v" b5 }- u6 x2 k
  769.           if(fp)
    ' A* e1 ]8 O3 J$ [% j
  770.           {
    # Q" d! z  ^9 G2 ^
  771.             fscanf(fp,"%s",szString2);  ?8 a& i  F7 Z( v0 m( `
  772.             fclose(fp);
    - m/ e) A% q2 Q" g7 e8 e6 t
  773.             if(atof(szString1)!=atof(szString2))# ~7 i4 h. [3 k: j2 v' H6 k
  774.             {
    1 h0 G4 A0 r/ ]3 r; _
  775.               if(!Dn.Connected())
    8 E! {+ P6 _# p/ B# a! m; X
  776.               {
    ; Y$ j9 L; ?+ J5 ~$ n  h$ q
  777.                 bFirstUpdate=TRUE;9 B9 p& a0 f3 n9 F5 B( `
  778.                 dwTotalFiles=1;. s9 r) k/ m" A
  779.                 dwDownLoaded=0;
    9 z+ j" B+ E2 b
  780.                 bSilentStep=FALSE;" u0 t' D1 @! u2 U' }" J
  781.                 bCompressed=TRUE;
    2 v! c6 l. T" j/ \1 d
  782.                 strExtLocal=".\\DownLoad\";
      h" E5 p% k' W& n
  783.                 strFullName="update.txt";: d8 J' I- o0 \6 E/ D1 D9 E) J
  784.                 dwProgramState=AP_CONNECT;
    # k& ]8 t0 K; l" |$ Z, D3 x5 q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ O' z4 }) c% w+ G$ q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : N0 V" m3 `  U: C, z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ ~/ `/ p( g4 a; B0 {
  788. 7 v- D, N( k3 d* j8 _  o5 u. f
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ |" n" R: M' i# f2 t& s
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & k- H% z( [! b" ?/ D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 p8 q7 {. R3 y, N" v
  792.                 {
    4 n6 e  Y: _" u3 `; n% R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% l8 @! L' r" L: i( Q( d8 |
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 N" G( L4 n7 G( I* T% c) a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& N/ i* x  L6 Z0 ]* p7 `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # H% k. G4 `, }1 u7 C! @
  797. $ E0 N. `( F5 h- _& |( ~2 ]3 b
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) [' G8 Z) W% @5 G) G
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 z9 }3 f! {+ L6 s8 l- S! U
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 n! ^3 e5 k4 x$ v  H# Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# D) l3 l3 H* }- ]
  802.                 }
    5 S8 P. ?$ `; e
  803.                 dwStartUpSteps=5;
    5 J9 `" O4 E2 l  [; W0 C% Q% b3 M& L
  804.               }7 K1 N) M3 b6 l$ F1 y, `: ?/ Y* C
  805.             }" v7 Y! \& c  M* Z: h) C
  806.             else
    7 ~2 p( B/ u* Q# r1 F+ G
  807.             {& g6 N+ m' U. W# V) v, E
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - X( }( k4 h, {
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 `5 q5 t8 ~6 W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      [: J0 U: g1 K
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" g* B" A' X* C3 C
  812. & E6 C& W& l% ~  D4 R
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 f1 q8 {2 ]  C7 V5 E& \* O
  814.               dwStartUpSteps=99;$ P) v4 O/ ^) z
  815.               bFinishUpdated=TRUE;3 `( \4 w- ~# ?  W9 p7 [' A# a
  816.               bCanUpdate=TRUE;
    ; B. g( G1 T% W: Y. v
  817.             }) |- m8 ~6 G4 |0 F6 R, v
  818.           }
    , ?( f* Z, f8 K
  819.           else
    " s; `3 g, c. N4 ~5 I$ M
  820.           {
    ; n) [: L) g9 [3 H0 E1 n
  821.             if(!Dn.Connected())
    ( T9 V; v5 L$ Z
  822.             {0 h' ~( O7 e9 I! z
  823.               bFirstUpdate=TRUE;1 u" u' ]3 R3 c& Y- i7 ?: A+ T
  824.               dwTotalFiles=1;3 N5 a% s  W$ ]% {
  825.               dwDownLoaded=0;0 t% w: M6 n) c$ x0 J
  826.               bSilentStep=FALSE;
    ; M# t* `( H9 X$ B
  827.               bCompressed=TRUE;+ `. i2 v0 @0 r* Y: V1 Q- X
  828.               strExtLocal=".\\DownLoad\";5 W5 O0 ]  C, X4 `8 a" H. Y
  829.               strFullName="update.txt";
    % _/ J- K/ b1 w. G5 _! R
  830.               dwProgramState=AP_CONNECT;% h& {7 E; ^1 B; i0 j" m/ ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ }# x* w, g) L$ |0 D2 Q0 j' Q" k5 |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 N* {$ N9 w6 u2 n
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ j) W  L' R0 |4 c# ]/ Q8 n  Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 R( X' _6 c! y( D
  835.               unlink(".\\DownLoad\\checkversion.txt");- s& L  _2 [& V4 \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    * ~. O1 `9 P  m
  837.               {
    ) g1 m" F/ r4 c2 u% K3 n$ f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! N& l0 l$ v9 _. c9 P7 a; }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! j, U8 S3 o; W6 S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");+ `- x: m" ~5 _" o: h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 @% m, [1 k" Q& Y( @7 L3 k" [, A
  842.                 ' {6 S- [/ s" y/ N& v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( S/ I+ w$ U; L9 Q3 h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 K+ ~3 ~4 @% u
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    8 [2 b" s5 A7 _) a4 N
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 }  `+ L* y5 f4 z2 r8 N
  847.               }6 A% |& \/ z9 u! ~* T9 @9 ~! J
  848.               dwStartUpSteps=5;
    2 Q8 x8 [1 j7 P# T; U/ Y! d9 c
  849.             }3 M9 \( r/ {- P  C
  850.           }
    5 Z+ a: J4 J0 [3 Y/ ?  L0 A
  851.         }  j% C) J2 l/ U+ l4 ?
  852.         else/ u! o8 `  K7 ^7 g/ h9 t
  853.         {3 {3 @' ^9 ^' r& g5 N7 h9 e
  854.           dwStartUpSteps=3;
    , x' T' i6 N0 I8 E" H8 F
  855.         }
    & {4 M+ U4 h, p2 ^$ ^& {
  856.       }' N6 h- M* g$ X4 s6 l8 H; e, t
  857.       break;2 z$ J  H% o+ [; u& D
  858.     case 5:
    0 Z, j5 [$ j9 M; Q- ^( i
  859.       {1 U1 F6 a- X6 z. A  j* O+ `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 \7 P7 V6 J( x1 f+ Y
  861.         {
    $ \, y- D4 i! ?5 G. p  D
  862.           int opt_overwrite=1;2 e$ p/ l6 u* ~/ `
  863.           int opt_do_extract_withoutpath=0;
    4 M' U" w6 w1 G( Q! Q
  864.           unzFile uf=NULL;, L  K2 c6 i8 m+ M
  865.   y8 M- C/ q" {6 c  R2 \  x
  866.           uf=unzOpen("Wsa.zip");+ o7 R/ P8 b% p) P% d1 X
  867.           if(uf), W& A5 h/ i! x6 {% |" a, E* G" c# @
  868.           {
    4 l0 A0 n" v/ V
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" r3 W. Q/ a& B3 D7 }! ]3 i
  870.             unzClose(uf);5 @: w" X+ V. X5 |& t
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ \% E6 t( y3 `- J8 `4 U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ( K$ R) o9 @) d. [0 |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");6 G4 |9 G/ L; y4 M3 |2 G( r
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 F; }, _  v: u+ X/ a
  875.           }
    " q; Y+ ]- f4 t- |# @3 _
  876.           DeleteFile("Wsa.zip" );: p% q  j* _2 F
  877.         }
    ' }6 Z$ O/ U# u
  878. ! }6 L( }: A1 i) a4 f8 w8 f8 ]
  879.         if(CheckLocalVersion())2 p  e9 D! r& P% M$ S8 R: O
  880.         {" B9 Z3 ^8 ^  [2 F* y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");' Q8 c$ o: j! e" ]6 K: s7 P  P; A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% d$ R1 I) i# X3 n7 ?
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 ]. F" s" r/ _# U
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 m. T* Q" m' E: `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 K4 x6 C, f& W' b6 C5 B) P$ x& Q
  886.           dwStartUpSteps=99;. t* V0 |9 f7 o/ Q' t
  887.         }, |8 G4 }1 }3 @
  888.         else
    + X* a, |8 J8 k+ V8 N9 R
  889.         {7 d1 X$ [/ [7 b- D. Z8 ~
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 @: }, {& v* B" y5 d; S9 J. [
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. L6 l7 m# [  M7 s
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 o& w' A3 \+ Z1 a& E3 y, y
  893. 3 J; |& Y4 i4 E$ f6 Y) x
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 f  L% T7 d! k2 s+ \& j% D6 @
  895.           dwStartUpSteps=99;; r9 e( r& h9 E, l: g/ c. `; e$ F
  896.           bFinishUpdated=TRUE;
    4 S) {2 x6 G5 J( @) j; b, O) Y, b
  897.         }5 L( w! b- c# x* E
  898.         bCanUpdate=TRUE;
    1 @! e' a$ ]0 q$ O
  899.       }
    " f$ Y' `3 W+ \! L6 b
  900.       break;
    3 Q. ^+ }2 I+ Z0 D. s: R8 _- l
  901.     case 6:
    + ]7 `4 @  T: u0 h* {: ~& G) @
  902.       {
    + R9 ~+ u, Z5 Y& W/ p' ?+ U3 _
  903.         if(!UpdateLocalVersion())) o* W: [! E/ K1 g# e+ p: S; q
  904.         {* i! n# n8 \. \( H8 G0 w
  905.           if(bRestartUpdater)
    . c* e6 b* y* G
  906.           {
    & f) N$ ~$ r3 J* Y) x4 ]! d
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    7 N; p9 l/ K# K3 i7 T
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    2 h, i$ v& J6 ]
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    # H* r' j- T  t5 d# v! l
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());6 r7 f  G' Q5 D# z" l* ?
  911.             dwStartUpSteps=99;8 l0 @1 V: [& O; v2 y% _
  912.           }3 F' U: [' g% l" |5 G
  913.           else7 T% W9 N5 }8 o2 N% Z" R
  914.           {; P. u& T+ |/ G9 `1 K/ v( t
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");* {* ~& r8 N+ Z. y3 y
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");
    1 c/ b3 b. \- }$ r$ v
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");
      l8 x6 n- l* k: Z4 H
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ V+ Y1 v# C, V  [$ }! `
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);: Y) T+ W8 W; J$ V( {
  920.             dwStartUpSteps=7;6 c" L* K6 W+ N1 C, p2 k$ N) |% t
  921.             bFinishUpdated=TRUE;
    # s" S- `4 V% p+ I& y6 ?9 H2 r
  922.           }, u) ]5 m( [8 q; w7 P- I3 p
  923.         }4 f8 \# h. h8 _3 ?0 h9 L& W: f
  924.         else
    ! e2 f8 Q; C' r; i9 ~" j
  925.         {. v& F4 O4 \% o: [. }+ ~* Y
  926.           if(bRestartUpdater)
    ) a: ~$ l, z. d9 l' ~8 K
  927.           {9 v1 Z8 W2 Y1 f# [! U% T' `: x- X
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);' P/ j" ]# T$ d; `
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    6 t0 L+ W  O" E3 W
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    ; Z# f4 W0 I5 k7 K& v& r& n' f
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    0 |, {$ h% g: b  E$ R6 j
  932.             dwStartUpSteps=99;
    * `; k4 B2 i% t
  933.           }/ ~' b- y9 d3 Z4 K8 U5 @" m0 [
  934.         }7 H& j3 h+ n- a, V$ k9 O& R
  935.       }
    9 G! b0 ]- Y. ~) g; B/ D' }8 `
  936.       break;. W! ^+ b/ v5 k
  937.     case 7:) I9 F7 d. I/ O% a' u
  938.       {7 D* P9 J0 d9 A
  939.         char szExecuteFile[14]="Bf_Client.exe";
    0 f) n3 G5 n# f% s; |8 P- @8 E
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");
    ! z8 {6 l, b+ E6 @1 L8 ]
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);9 E+ p5 x4 n! h/ ]9 D3 L
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);
    1 |: s; j9 o7 p9 z$ }/ C! E: m# |
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    3 u1 M* E& X: Q2 E# Q
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());/ G6 ~7 F1 i$ E
  945.         dwStartUpSteps=99;
    * {& j4 n  {" m8 t0 J
  946.       }% ~! M) X5 S  N9 H% r/ i* E+ W& Q8 E
  947.       break;, F* m$ O/ l" q, H" \; Q  T7 P
  948.                 //add by cece
    4 O) X& z: w7 O: a! z- m( R3 m2 f
  949.                 case 8:7 c" q! t( E2 Y2 z7 Q( _
  950.                         {
    9 v8 q% A) v" B& I
  951.                                 if(!Dn.Connected())" _" q, n( o5 ~
  952.                                 {3 h* p( u- `: I5 e0 s  |/ Z
  953.                                         dwTotalFiles=1;' I$ V' ^  H" {0 ]1 Y  l8 e
  954.                                         dwDownLoaded=0;3 G5 c2 Z; @2 g0 z2 s5 A+ N( M
  955.                                         bSilentStep=TRUE;: M, {- T+ f) Y% d+ ]7 E/ k& a. B
  956.                                         bCompressed=TRUE;3 c$ P, a8 V/ L' [. C
  957.                                         strExtLocal.Empty();& O5 Q) H5 v/ ~
  958.                                         strFullName="download/CRCTable.txt";
    ! V- [. h+ B# M# g/ @: z
  959.                                         dwProgramState=AP_CONNECT;7 c( }0 H6 g/ I
  960.                                 }% c$ M: X* z- w# e' e5 a. j2 b
  961.                                 //+ m: S: h2 L( p0 Q5 O3 `- h
  962.                                 dwStartUpSteps = 9;$ }" _" s/ A2 S4 u& g, D; _
  963.                         }4 k5 z( o0 C6 H! X( }. J  Z' a6 e
  964.                         break;, j9 o  S7 N3 E
  965.                 case 9:4 N( d8 `4 B+ a  R
  966.                         {
    ( ~( ~$ P! e+ h0 j
  967.                                 if(!Dn.Connected()), C& ]# y) q, _$ }) u' y5 ~
  968.                                 {
    ) W) J  a& D  ]6 Y( z
  969.                                         dwTotalFiles=1;; c/ b& j! ]4 N' X" {% P
  970.                                         dwDownLoaded=0;
    % E# w7 f- w4 T" R7 x$ w$ J
  971.                                         bSilentStep=TRUE;  P. V9 t3 u1 U
  972.                                         bCompressed=TRUE;( }8 p0 Y2 T* u4 f# w3 u0 f
  973.                                         strExtLocal.Empty();
    2 k: u0 `2 i& e5 H4 _6 Y8 s* t
  974.                                         strFullName="Run.exe";
    : k. q5 A& c3 d! \; t
  975.                                         dwProgramState=AP_CONNECT;+ ]0 y$ n5 Y+ ^" u' g
  976.                                 }" c9 S0 j! i( {8 o" L' P
  977.                                 //
    2 G" i: F0 d, e, ~/ N. |
  978.                                 dwStartUpSteps = 10;% z/ N+ b; W4 K. H+ O) g' X
  979.                         }
    3 U& T3 @6 i$ \8 k/ B1 k
  980.                         break;: M* C5 {+ v% S. i6 T4 ~
  981.                 case 10:4 c/ y* h& a5 X. _% d
  982.                         {# X. t+ N5 u  L% k& f
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);' b6 u  Q- `4 W; |) T( e
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);6 ?# Y3 V. }) C6 o, F
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);% i. x- e6 |1 p
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    # g$ c: P; j2 f+ o
  987.                                 theApp.bClickRunExe = FALSE;
    + S1 n% n$ K* A
  988.         dwStartUpSteps = 99;4 s: I" ]3 ^0 u( Z+ t" c$ x9 J* T
  989.                                 //+ k$ O- P2 m( D7 C. k
  990.                         }, x" ?7 s% M9 z7 S2 X' n! m, I
  991.                         break;- K4 h8 f7 a# r# Y3 u
  992.                 //
    & z. J& ^+ W4 K) [  U& j5 t
  993.     }
    $ _; ?9 }) Y$ C0 T2 i  n0 p# W7 h
  994.     break;
    8 j8 k* W, F2 o8 ]* z
  995.   case AP_CONNECT:; O/ O7 n6 D8 f3 @: C
  996.           if(Dn.InitNWSSock(4096,4096))7 h5 _6 O9 w4 c" j( i$ w
  997.     {
    1 h) v+ t: J5 o
  998.       char szPathName[MAX_PATH];
    ' ]! j: [! r$ s. b& [
  999.       dwLastSize=0;
    7 }  i) l/ h& i" a
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);; E) j, K5 K' j- i0 ]$ g
  1001.       strFilePath=strExtLocal+szPathName;
    / h* ^1 m7 b5 C
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));
    " x# L  L; Y+ j
  1003.       dwResumeNums=0;- Z1 d( X7 f4 A. g8 ]' V. W
  1004.       CString strTempName;
    ) ]% Z/ d( R% [* g7 y9 [6 \
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);) _' Z" \7 E0 q5 e4 u! X# v. o; P! m
  1006.       CString strCountData;% d$ U2 v% G9 ^- O) P9 ~2 q
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);! e, d* V; L. }9 Z0 M$ l* h
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);
    0 n! V2 [) t9 b- D2 b# Y
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; `/ ^$ Y: d) ~6 K1 \
  1010.       if(bCompressed)' I9 {+ h8 [' c* C1 {
  1011.       {, ]- L/ R6 P# @3 U
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);; p6 _( M& Z4 X$ F9 N% n' z5 T4 a
  1013.       }
    0 y# C; ~- L8 m" ]) c: s
  1014.       else
    0 L0 ~" s9 U7 C3 ^( b# ]
  1015.       {  }( d& m# E0 m; N
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    ) I3 s* O8 F; \7 X+ T
  1017.       }
    4 ]( x$ ?1 }  J( J- W
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);; @) Q9 i3 r1 b6 ~
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());" r0 |  i- w9 q& A
  1020.       LastTickCount=GetTickCount();
    ( O( h: Q2 V/ u  _- s! a# w. [4 n
  1021.       dwProgramState=AP_SENDING;
    7 n" X5 a3 M! ?, H) m3 ~9 X
  1022.     }
    * t, _% c+ G0 _4 |
  1023.     else! p+ q0 T" U; o
  1024.     {
    # O6 |5 A) j$ b3 n1 H. j" f
  1025.       Dn.QuitNWSSock();% @. Z( n0 e! ]. Z0 S& V
  1026.       dwProgramState=AP_NOTHING;
    ; b, |' Z% q! R% l/ t2 [1 Y
  1027.     }
    / D  j) ^$ C  _; I/ k
  1028.     break;
    1 A  j  B( i0 M5 E: \0 M: Q1 k8 x& `
  1029.   case AP_RESUMED:4 q" i( u; ], x* m; ]- M4 Q
  1030.           if(Dn.InitNWSSock(4096,4096))
    ' F/ e/ |( K" D& x3 V) Z
  1031.     {# j7 h. S5 }  T1 t. @
  1032.       dwResumeNums++;. n7 M; U0 B( S& c: Z3 b
  1033.       CString strTempName;; O0 Y+ Q8 s+ e" S; D8 l
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);
    5 Z( W4 T: F& c5 m- ~
  1035.       CString strCountData;
    . H+ P1 t' Z: t* u& e
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);
    8 O7 j$ C0 J; t1 K* i
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);
    * N# p- F# H( I) H' P0 a' f& m, e
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % C5 u/ d' a, l/ z- v; T
  1039.       if(bCompressed)
    % t: e: K2 e# I
  1040.       {/ ~! I1 F3 S) g1 H$ G
  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);
    " ^0 n! a# C9 h" W
  1042.       }
    ( H7 C, y( |( e1 _" m; F8 d
  1043.       else
    / B/ r0 i& A  V# n2 ?) c  l& z+ P
  1044.       {% @5 z5 @" \# j1 U- C' d' \3 l; N! A" q
  1045.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);" d  w; {* y! L9 f
  1046.       }- @, {  B( l; f+ x" P
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    - |9 ^( ]6 R9 U7 {4 e
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());
    ; B2 Y7 z# ~, ^* r
  1049.       LastTickCount=GetTickCount();) N0 M, P" g! _; P- L
  1050.       dwProgramState=AP_SENDING;
    : e. I/ ^: F9 ?, o  F  I
  1051.     }
    4 n9 _1 Y+ k9 b4 G+ w
  1052.     else
    8 A/ k" Y- w2 R
  1053.     {
    7 x* k4 g+ g" X# c: G
  1054.       Dn.QuitNWSSock();0 Z# V9 p% G" ^) B5 ?/ T
  1055.       dwProgramState=AP_NOTHING;2 h* |' N: q6 `, }
  1056.     }
    ( E$ _# |3 e: S8 f* e: X* L
  1057.     break;
    5 t5 H/ U, z% |& U9 A% a
  1058.   case AP_SENDING:
    1 m  i5 X- B* O, C* U
  1059.     {
    : S# e1 q7 l, n6 G0 o6 g: q
  1060.       DWORD RecvLen,SendLen;0 W; O7 u' t$ V# S
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))/ {3 E1 m7 U" t4 P9 v
  1062.       {1 Z1 V+ h1 b9 B; p6 ~
  1063.         LastTickCount=GetTickCount();
    ; t$ S& W; _: S# B# ~; S7 D
  1064.         if(SendLen)
    - m8 P0 z; O# N3 w' l* D5 w
  1065.         {3 ]/ ?. {  t1 `9 E3 D2 W
  1066.           bReadHeaders=FALSE;
    * \  o5 u5 F: O/ b6 l! n
  1067.           dwProgramState=AP_RECEIVE;
    " Z% M: z; J  x+ C3 A* q/ h3 L2 [
  1068.         }
    1 |& W3 S- S  B
  1069.       }: E+ J8 }" A% x+ V; \# A1 a
  1070.       else
    6 [) A7 j5 A+ l7 r
  1071.       {0 q7 d: E) v$ m. O
  1072.         if(GetTickCount()-LastTickCount>3000)3 D0 s; W6 z- I
  1073.         {
    $ @/ u& J8 ~8 s( @" Z
  1074.           Dn.QuitNWSSock();: k( V5 a0 k9 A: D% |  n. }' S
  1075.           dwProgramState=AP_CONNECT;. t8 `& h  Z0 r3 ~( ]6 v
  1076.                                         //
    # T+ M) {/ ]+ u4 J; h
  1077.                                         static DWORD s_dwCount = 0;
    . @; H" o6 P8 b# V  G/ ~8 P
  1078.                                         s_dwCount++;
    : t5 }# m5 Z6 o4 K6 x5 m
  1079.                                         if( s_dwCount > 10 )
    . c0 B' v3 P% R4 K# m8 t
  1080.                                         {8 l' A5 p$ ^) p9 {  e  P
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);
    , s' W+ ?1 U, r9 ]- V
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);) k9 s/ Z: j9 k+ A
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);$ r3 x% ^2 w, p& B. g  g
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    1 W  b: i" K) g
  1085.                                         }
    6 F( s" n' f- V0 X- u9 l: {
  1086.         }
      V- M& c" f. o! g
  1087.       }5 I' i6 T2 F/ M
  1088.     }
    ) b4 k3 F- r. |
  1089.     break;
    9 m. T, B6 Y" ~$ g5 e% T& x$ V
  1090.   case AP_RECEIVE:
    ) T- ]: ~: d1 i/ d  \
  1091.     {: N6 H- |" |$ y; z. N6 u, d) y& A
  1092.       int Count;
    2 |/ U, u) I5 D( {% r
  1093.       DWORD RecvLen,SendLen;8 k: l! G- P& ?% ?% T
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))2 h7 b$ }+ e$ [$ l( [/ K/ x7 p
  1095.       {, q; b0 s7 |) q" N9 v/ I# M3 a
  1096.         LastTickCount=GetTickCount();
    $ A1 i( |6 z# |# w% i# o
  1097.         if(RecvLen)
    9 }: V7 B$ F$ E6 V; M' o  {
  1098.         {
    2 T5 p7 w* s. _0 ]2 q
  1099.           if(!bReadHeaders)
    , j" R9 z) `+ n1 c6 @9 z
  1100.           {# g5 B0 r/ o3 a& O9 V
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");0 z7 R. F, }2 p5 U: Q8 [% I8 N
  1102.             if(token)
    4 p  E, ]! |/ Q+ c
  1103.             {
    * p/ p  y4 D# U
  1104.               dwFileSize=0;  L& o9 Y: p2 f2 \  t
  1105.               for(int i=0;i<(int)strlen(token)-3;i++); G. x  h; J; j3 q: e7 `, }( P& |
  1106.               {3 d1 b. x1 N5 z8 k' i
  1107.                 if(!strnicmp(&token[i],"206",3))
    2 r' F3 L, H) m" G. |7 N8 E
  1108.                 {5 o% V% c& S* V2 u( z
  1109.                   if(!bSilentStep)
    8 h0 ]! D. R! D
  1110.                   {
    ! F/ m& Q. s/ h) m7 ?8 s) n
  1111.                     CString strTempName;
      s" e; V9 e; d
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);- R7 ]" I1 w6 d
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);) L) f$ J0 E0 E$ A+ a# {. V
  1114.                     dlg->m_ListText.AddString(strTempName);6 D- _! N. R( M3 x
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 N- H7 E) I! W, |5 J  Q
  1116.                   }/ Q( q% z+ _. O8 ^) x+ t  X
  1117.                   bReadHeaders=TRUE;8 ^9 |; w/ X  D- o, A
  1118.                   while(token=strtok3(NULL,"\r\n"))
    , _. T" |9 M5 {1 X  l  U
  1119.                   {3 M4 U5 R6 X6 B% C
  1120.                     if(!strlen(token)&&dwFileSize)
    ; f% s! G% M! p3 P
  1121.                     {
    ! v2 Y1 V8 q% A: J, [; n
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    7 @9 Y; m' N6 `0 P9 `+ H* h+ c
  1123.                       if((int)Dn.dwRecvLeft>0)
    ( i$ M0 l2 h! [8 J# x
  1124.                       {* F7 G" _* ^4 z7 v' B9 l! w
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)% Y; }2 [; ~+ z$ I
  1126.                         {
    ) U8 d) Q5 X- ?! d: {; Q
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    ( v1 I7 x0 Y- F: p5 P4 k4 f$ W
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);' P$ t5 k3 R+ b" e- P% b* N8 x7 o
  1129.                         }
    ; L  n8 v$ U3 x0 Y/ O" f
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);2 y6 j! [# p* q9 u. w9 v$ r: S
  1131.                         dwCurrSize+=Dn.dwRecvLeft;7 j! `0 `) Q2 k2 T
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;5 [) V! a+ M. z( u4 t9 H0 [: k/ W; a' J
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    % _2 l2 m2 d* M; ], \) A7 Q: W, C
  1134.                       }! _9 ^9 d. P+ Y* }; p) W
  1135.                       break;: J; ]! d/ Z0 i8 z1 N8 Y
  1136.                     }
    - I5 R$ k5 [8 W3 H! Z8 ~. d% f) H! M
  1137.                     else3 F8 ^& D6 h" u
  1138.                     {9 \2 A+ o+ ^7 c- Q5 `9 n7 ]2 M0 Y$ O
  1139.                       if(!strnicmp(token,"Content-Length",14))
    : i! o  a9 |$ f: w
  1140.                       {# A3 h+ V7 k5 P. q4 t
  1141.                         if(!Dn.szCompBuff)- z( T( M! g. K
  1142.                         {
      m: T, ^9 U+ I3 l
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;: T; }/ a6 J/ v0 \9 `0 X
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
    : L$ e, _* a0 J* h
  1145.                         }& l3 _9 _9 q. h5 y" G/ `" D
  1146.                         else if(dwFileSize!=dwLastSize)
    1 [1 t5 Y  B, N! j$ D
  1147.                         {
    8 }) s9 P9 _& r9 u! K
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    7 s) E3 n6 q: ^! y. F
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    ; r' m, \' ~  b% q" w
  1150.                         }
    - }. R5 c# k, b% I
  1151.                       }
    2 T0 a- z$ V+ Z4 `8 S& x1 Q9 M7 ]
  1152.                     }
    # m8 v# Q' W9 O3 ]
  1153.                   }
    / L" }* r5 H( J* N% [
  1154.                   break;
    3 T* `2 a$ L1 d  J0 \) f
  1155.                 }& B" K& n  }& o7 ?- B! z$ p
  1156.                 if(!strnicmp(&token[i],"200",3))
    $ `+ r! H1 a+ D2 c& w# F
  1157.                 {
    6 ?0 j& s" D0 W
  1158.                   if(!bSilentStep)- H8 U; k! G5 Z& l
  1159.                   {! Y5 j6 i& E9 ^
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");3 }% q5 {/ C3 y8 B
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 ]# c' ^, t) n
  1162.                   }' n" s: j4 ^/ J& l& C; T% N
  1163.                   dwCurrSize=0;( @  m4 n) J7 [# p/ V. w: `# p
  1164.                   bReadHeaders=TRUE;2 o6 |9 G5 q- f0 B$ Z8 p
  1165.                   while(token=strtok3(NULL,"\r\n"))
    ! F: {' ]. E, B7 d7 ], a+ F
  1166.                   {+ H' x  p1 O  D: H
  1167.                     if(!strlen(token)&&dwFileSize)
    , n) X1 i0 E, Z7 o
  1168.                     {
    1 _7 C/ _4 a/ ~7 M9 u5 Q
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    % Q% l% _$ N  n+ e3 X8 ?
  1170.                       if((int)Dn.dwRecvLeft>0)5 \" B' m' d$ f- k% t, B
  1171.                       {+ [: ]) c7 l- H2 p5 r* h
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)% @' R7 }0 f# y! c, s* M
  1173.                         {) ]. Z# f6 F2 J
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    # A' k7 j1 |- x6 Y3 M, Q
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);* ]' _" [1 e9 t& t0 [
  1176.                         }
    / y6 Z5 U: |( S! s- s, R. F7 {2 q* f
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);6 l: L, `3 D$ b, o
  1178.                         dwCurrSize+=Dn.dwRecvLeft;" G2 A- X: c2 N
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;
    , H% D# c4 o- Z% E
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    5 G# p! q9 [& v7 K# o
  1181.                       }) ?, g5 a" T, M/ _5 t: i
  1182.                       break;- t, D9 r# [- n: f- i- s
  1183.                     }
    ' h3 c* z3 Z; g8 n) f* P" l
  1184.                     else
    / k" ]  A* C& D2 m
  1185.                     {
    , e. ?" Q; K+ b2 O# D
  1186.                       if(!strnicmp(token,"Content-Length",14))0 }' y9 z8 f' `% F
  1187.                       {
    9 H+ X9 O7 T3 U4 C9 p
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }1 _4 E- L! U# G; [; J# m/ t
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);
    / W# T* a) \( U3 y# r
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);
    # \8 H8 A+ b, D) G0 ^
  1191.                       }+ [7 s! |5 S1 U$ y7 X7 P( H
  1192.                     }
    5 N$ i4 M4 `% s, d0 F3 G3 {3 X0 W  C
  1193.                   }
    ' D# Q! h  O+ K, I3 j, Q
  1194.                   break;
    ' Z, c/ Y% P0 Y. \
  1195.                 }
    ) U& K1 r3 q- ^
  1196.               }
    ; e* ^) C5 w6 D: _$ C2 ~" k
  1197.               if(!bReadHeaders||!dwFileSize)0 G3 b7 M3 ]% U1 x  U& U
  1198.               {
    9 @0 L: F  I" y+ G* E  ^) l5 |
  1199.                 // Wrong Header or Reading File Size Error
    7 y  U3 L" N6 \- z: }$ C
  1200.                 Dn.QuitNWSSock();8 F* l4 R" d$ F# T1 `- Y
  1201.                 dwProgramState=AP_NOTHING;
    8 v* K% Y8 Q- e) t1 ^4 z# x% L
  1202.                 CString strTempName;2 S% D5 V% G, @1 T) S% ?/ ^) ~. c
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);9 P' w+ m0 y4 e+ f6 \! J
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);
    " u9 d6 l) p. Y
  1205.                 bRestartUpdater=TRUE;
    8 r3 D) m3 P( n! \
  1206.               }
    : M8 Q/ e& r& L* a
  1207.             }% U1 ^; N5 {; [# [8 i
  1208.             else; \+ A9 L! U2 u9 a  m, ^
  1209.             {
      x/ l1 N0 ^2 t- a* S: Y# E
  1210.               // Have No Header
    6 N3 v7 `$ c) F. a
  1211.               Dn.QuitNWSSock();
    ' o, n. I! [6 c* [
  1212.               dwProgramState=AP_CONNECT;
    9 s: {8 Z; v) P; {: `4 ?
  1213.             }; Z1 M% i- i- Y1 f
  1214.           }' A& {+ M! G2 V$ k+ _  S
  1215.           else/ |8 ?! Y+ }; d# I! f% h3 B) k( f" _9 H
  1216.           {2 H# {! Z* B* ^. O2 x: K
  1217.             // Reading File From Web
    - D4 Z' _8 D# h6 I: M/ D
  1218.             if((int)Dn.dwRecvLeft>0)- N! |' a/ k, M+ D" o% W- h
  1219.             {
    3 \+ i9 N2 `% ^
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    4 h/ j9 l8 s8 C  J
  1221.               {
    4 z: L" S: j" N! A; ^8 b, Q7 o
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;- F) r* b. H/ P: j
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);( L' f$ i3 H: w  \
  1224.               }& A3 f" X4 g3 Z6 L6 [- T
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);0 G& M0 g5 u/ _5 f) v$ d
  1226.               dwCurrSize+=RecvLen;4 J- t( j. S5 ]# n% y
  1227.               Dn.dwRecvLeft-=RecvLen;
    3 c. Y. V5 b5 r) m
  1228.             }
    * R0 i  Q' V7 s4 \/ U/ G
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));
    & K) G2 j& j: j9 \+ U/ F
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);
    & D& ]8 j) p8 H5 }4 y' v1 {
  1231. //            dlg->m_Process2.SetPos(iRate);
    ) e1 |! V" C8 p1 Z) e* T
  1232. //            if(iRate < 0)   iRate = 0;, |0 s  p1 ~; a# [
  1233. //            if(iRate > 100) iRate = 100;
    # Y& W) ^6 J" R+ R; d. R
  1234. //            char szShow[5];" A2 _- X( U! d2 v' C+ Q
  1235. //            sprintf(szShow,"%d%%",iRate);
    - n( w0 N* L- Y! Q
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);
    3 N/ i, H0 ]0 c7 y4 n# S% z: O1 w6 B
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    $ ?# B( b% M* B3 ^
  1238.           }
    ! E5 Y) i# s4 q1 O' Q9 t1 H/ \0 K
  1239.         }' U1 \: R  v" a4 Z7 {4 |# m
  1240.         else if(dwCurrSize<dwFileSize)/ I/ g+ U6 d1 o2 D5 L5 u
  1241.         {+ M/ |5 G( o9 E, `- }
  1242.           // Disconnection But Size Error
    / r. r; X% X% g. Y7 u6 o7 F& w
  1243.           Dn.QuitNWSSock();
    9 L, y  h8 J+ Q1 l! {
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;9 j3 C) Z  O0 h" \( s+ c+ M
  1245.           else           dwProgramState=AP_CONNECT;
    4 `' l  w3 b  G% p( s
  1246.         }
    # v# @8 a8 U, s2 ]( A
  1247.         else
    " y. h. w) W& k$ w2 L
  1248.         {) l' @" M. M! A5 n, E
  1249. SaveFileJump:) p2 c' z3 X4 e$ Y
  1250.           // End of File and Disconnect
    + ^- U8 ^( y' @! l/ c
  1251.           FILE *Fp;
      [1 p1 q. ~# S( w5 S+ u% X
  1252.           char szTempName[MAX_PATH];1 L- ~8 w0 B! g$ w
  1253.           strcpy(szTempName,".\\DownLoad\");
    2 P. V- L3 h3 I7 S
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);
    ) m5 a) u5 o; C! ^( `3 k
  1255.           if(bCompressed) strcat(szTempName,".zip");
    4 o0 N: J. F2 W$ }2 P0 o% S
  1256.           if(dwCurrSize)
    * P" ^- x0 A3 t% v6 [) k
  1257.           {+ v/ I# n& C6 g3 M4 S" A; g
  1258.                   Fp=fopen(szTempName,"wb");
    7 J5 ^, P1 p" }: _7 i$ {
  1259.             if(!Fp)8 \+ J* J, G/ c8 W/ l
  1260.             {. n) e$ l0 t4 F* X7 ?
  1261.               _mkdir("DownLoad");0 Q- t0 Z2 D* Q+ L8 F* a; r+ V
  1262.               Fp=fopen(szTempName,"wb");
    5 R: {- v+ B: T$ I
  1263.             }
    ) X- C- J: ~3 c6 L. a% D
  1264.             if(Fp)4 y' ^# {- k' ~/ l( M
  1265.             {2 s. m/ R2 h5 Y
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);
    0 |/ k7 C% c8 F5 ^
  1267.               fclose(Fp);
    : n7 A. {! a4 a' g' m( f; A
  1268.             }
    6 I! N0 S3 u0 |' }1 M
  1269.           }
    6 S. S- S9 ]- `6 G! ]
  1270.           if(!bSilentStep)
    - m/ W8 x0 M: Q) q3 T
  1271.           {, d# v% l; n5 N# b3 l. Y
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    & X3 g8 i& V: C
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    ( D* i+ D9 Y$ n. X- {0 V
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: o+ C1 X" T# ?. }6 d) V$ c) j
  1275.           }7 R1 s: [+ k" s8 P# t7 Q
  1276.           if(bCompressed)
    7 Y  q2 ]- F; E6 u
  1277.           {
      {+ Q8 X! V: Q4 l; G- \4 P0 }
  1278.                    int opt_overwrite=1;! h7 G4 c/ X6 ]/ d1 Q+ [# T& B
  1279.             int opt_do_extract_withoutpath=0;
    2 o! O: T6 b8 Q9 `% K
  1280.                    unzFile uf=NULL;
    ; o! g- \) z7 A; F) x1 Y* B9 o
  1281.                          uf=unzOpen(szTempName);
    % e/ O8 R- F: n' d9 v
  1282.             if(uf)
    * S- T3 T4 D9 X1 }( U- F
  1283.             {
      l/ k* v5 K$ h$ h- }1 C
  1284.               if(!bSilentStep)
    2 ~' ], I' H( E1 A
  1285.               {) c4 N& y1 ^/ P
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);8 ]5 Y5 Z. }4 G" m  J" c' @( ?
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");
    5 Z6 P7 L1 U: x2 i% s' g7 l; F
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Z- E9 o) d# P* A4 a0 Z9 ?1 |
  1289.               }" |/ O( E3 X' g1 P* X' L3 x9 \
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)6 g. W! q* E; v; W
  1291.               {
    0 |3 ?7 F7 G# U% \! R: y
  1292.                 if(!bSilentStep)
    4 `+ K: r" m) j6 [  ?9 ?* v
  1293.                 {
    8 Q5 B4 k/ G( Y2 _4 Y
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);6 z% w: i8 Y4 S" `
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");: ~; w4 l- D$ \! ~
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - E0 l/ S+ O/ \% j% U
  1297.                 }
    : ^5 y; e6 e. ]: @# V6 j
  1298.                 dwDownLoaded++;& k( \) h3 b; ]/ t
  1299.                 dwProgramState=AP_NOTHING;
    - ]6 e) {) w! C3 A
  1300.               }" w- D0 s1 Q, R0 J9 ^3 g; n( |
  1301.               else
    4 L% b% z1 k/ P4 W0 K
  1302.               {0 t- }3 ]1 u) }; k5 R! r
  1303.                 dwProgramState=AP_CONNECT;9 Q5 ?4 D# w7 E' Q& L
  1304.               }
    ) P' A2 j; A# U) o) M/ i/ i: V
  1305.                     unzClose(uf);* @  C4 e2 ^: ~* a) W
  1306.             }
    ( ^- l. I  _7 Z) o# u8 ~, i: }
  1307.             else, a) E4 B' t7 T
  1308.             {
    / O0 T! {7 y9 T5 Y& e
  1309.               dwProgramState=AP_CONNECT;5 G) y8 K9 N8 \$ R5 x' `! @
  1310.             }: W1 q  J/ k7 V7 ^# _1 P1 S6 h; _
  1311.             unlink(szTempName);* m) v# R2 V+ Q9 W/ O6 V
  1312.           }- u6 q1 s( \6 O  f: F, R
  1313.           else
    4 j1 N6 i. i. Y  b! U
  1314.           {" j8 h- p! x; R7 e* O4 A' ?
  1315.             if(!bSilentStep)8 E0 P* B* @$ _, ?. C
  1316.             {5 o4 C* O, z, e( {6 B8 }
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    - K/ A! ~$ s; n: X
  1318.               dlg->m_ListText.AddString(strFileName+".....done");
    . a, s% w3 ^9 P. E' k
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * f# \2 t: L2 K/ q$ e' {
  1320.             }# g9 M5 b( I* c  P$ K$ o2 @
  1321.             dwDownLoaded++;0 a0 ?6 A0 d" l: |, T" E- Y
  1322.             dwProgramState=AP_NOTHING;7 P, Y/ I2 Y% b; \/ h5 z0 Y$ }7 H
  1323.           }+ ?) }1 X+ t: ~# r9 v
  1324.           Dn.QuitNWSSock();; x. ^) j! T' d% c. y
  1325.         }/ c4 X2 j- g. F0 P  N
  1326.       }) F1 k4 z* v, ]7 R
  1327.       else
      ^1 v9 f4 u5 K7 c+ J
  1328.       {; C& P  C" a$ {4 h" r
  1329.         // Connect Timeout
    ' t6 b6 g" ^" r4 [) e  ?
  1330.         if(GetTickCount()-LastTickCount>30000)
    2 Z. ?/ f" ]& a2 X& a3 U2 e
  1331.         {: g9 v- e7 G% ~
  1332.           Dn.QuitNWSSock();
    ! n2 P, a0 z% Y6 K' F' Y, A
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;: h' i% L- p# A/ k7 X! z, F4 g' T
  1334.           else           dwProgramState=AP_CONNECT;
      p& |" K. V5 n# |7 N
  1335.         }* L% D3 L8 _" B0 _
  1336.       }
    & C$ ~5 q: B; E* R" q
  1337.     }- o. z2 q# j5 u6 m2 v
  1338.     break;3 k0 ^2 h) w( {( O$ ~! M4 {
  1339.   }
      k. Y- F/ {$ Z* G) f8 g0 g
  1340.         return CWinApp::OnIdle(lCount);
    0 T! J' _8 m4 Q& w+ T
  1341. }5 `+ Z, ^( U8 O: {
複製代碼
其实登陆器也就是这么一回事儿……9 |' m( C4 ]1 l1 l% V( ^2 R
附件有编译教程和源码; a6 Z: g( ~8 U7 s( a: N' a: y4 L% R$ L
遊客,如果您要查看本帖隱藏內容請回復
6 ?& W& y: {4 h4 ?" e; Y! ?

( b" M" J' A% D. M3 h$ C

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-10 18:56

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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