找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
" l" I3 |3 u7 y, d# c1 L# s
  1. / RevApp.cpp : Defines the class behaviors for the application.  C* ]% r" C# @; O$ n
  2. //1 e1 U6 x1 Y' `: G* F# ?
  3. / s  U/ W, o8 n4 K8 V
  4. #include "stdafx.h"
    ' ~! [  }6 t: }* O. d) |1 x
  5. ! N. `+ B' O6 z3 ^; W
  6. //#define UNICODE
    7 [* O" p1 u, \4 u
  7. //#include <gdiplus.h>
    $ q% q, |* q2 m/ }  L
  8. //using namespace Gdiplus;
    : t) [6 r( x6 ?5 `) N1 Q' O: X
  9. , Z( A3 E; G3 |. C3 z. n1 F
  10. #include "RevApp.h"
    5 t# g) A% }6 \! J( \; Z
  11. #include "RevAppDlg.h"( S: I  L) y5 F$ I& b
  12. 2 E9 w7 D+ o7 h* d' B
  13. #pragma warning(disable:4786)" O. }8 Z" s2 B
  14. #include <map>
    $ ~7 J  X4 ~; [5 I( ]3 x
  15. #include <list>; T+ W# ?9 I# t4 V* v
  16. #include <direct.h>
    % m# r+ L$ I4 ]' E
  17. $ U6 Y* H7 j  D3 q- g3 P# E
  18. #ifdef _DEBUG2 o& n, R  e" v. f( i
  19. #define new DEBUG_NEW$ \: F- M3 d7 X* `' m/ u8 M- Y
  20. #undef THIS_FILE
    - s. k; s; _8 Y- V
  21. static char THIS_FILE[] = __FILE__;
    # F; r) q" U/ f( |
  22. #endif
    ( f1 h( a$ \3 _: t
  23. #include "SkinResDef.h"
    : t! i/ u( ^3 s
  24. #include "ChangeBG.h"
    ) b4 [- r+ Z6 j6 Z# s0 Z. n1 ^: w
  25. #include "AFXINET.H") ^$ a. M7 M4 N' b8 p7 z) f

  26. - q6 {% _% @: M
  27. #define TRADITIONAL_CHINESE 0
    , K! W& V: e  z9 O
  28. #define SIMPLIFY_CHINESE 16 V' b4 c: W# }( C: i, M
  29. #define ENGLISH 2" K" U. `  z+ q5 L
  30. int m_iLanguage = ENGLISH;# u- y7 \" S8 @4 F+ z; b) b
  31. /////////////////////////////////////////////////////////////////////////////, K9 n2 E% [* t2 ]
  32. // CRevAppApp% `7 j8 c& P% g' W7 \

  33. 5 t& o. f: I# k. n5 J& E  g, [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / `( o  P7 I2 t' T0 E
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 Z8 m) i$ ^7 W6 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : c0 c- g) H, `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!$ B; h# U8 g1 r5 _( I
  38.         //}}AFX_MSG
    / r8 J* _/ O* Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 L, t7 E- j6 t7 _' r5 K/ s
  40. END_MESSAGE_MAP()
    5 }4 @$ p) w4 C; z

  41. & f4 Q4 b1 a" a; @3 O9 h
  42. /////////////////////////////////////////////////////////////////////////////
    # V- c7 X8 ]5 p! @
  43. // CRevAppApp construction
    5 a1 _  ^& e4 Q5 @  r

  44. 8 v9 b& @3 ^! P) F: E
  45. CRevAppApp::CRevAppApp()0 g: j2 V# [2 b& G, ^. T
  46. {
    5 a  C) c6 o/ l. Z2 q
  47.         // TODO: add construction code here,
    ; u/ [; O2 J( `3 u/ W" r8 I
  48.         // Place all significant initialization in InitInstance) N7 O7 ]% t8 K5 c/ F
  49.   bDisplayIsBig5=FALSE;
    # `1 |% C! W: A, V5 {/ t
  50.   bRestartUpdater=FALSE;( G9 B2 Y; e6 j8 i6 `1 |
  51.   bFinishUpdated=FALSE;( w2 ~/ _' D7 Q" N3 c: ~) L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ Y* @. n: X- o! g7 V7 o! I
  53.   InitChangeDataBig52GBKS();3 j2 w% w4 _7 B7 P. j2 L8 G* \
  54.   InitChangeDataGBKS2Big5();
    ' L2 Z# j" x  V
  55.         //
    4 K2 t2 r3 M# a# @+ {3 J1 Q
  56.         bClickRunExe = FALSE;
    9 i3 h8 u& g* p% D/ O3 Y
  57.         //
    + w  V$ k! ?  _! n& q4 k& E" N
  58. }4 J: T$ m; B" |# n  [
  59. 3 ~9 c) d2 F, A+ ?6 s, ~
  60. CRevAppApp::~CRevAppApp()
    " ]  ?/ n% }' j" ^$ n& {7 S$ m
  61. {$ o$ f; }+ c: c- |" ?8 f
  62.         // TODO: add construction code here,9 S4 r# i5 u% a7 Y- f: l. ]+ e
  63.         // Place all significant initialization in InitInstance
    - E/ [& x* X5 b* V, D, s7 Q* w
  64.   EndChangeData();9 N0 z# C6 p, N( I( |/ l/ ^
  65. }
    ' m! k; d' g  m- h! ?
  66. 3 C- q8 j4 p# m+ l$ ~$ B2 l6 v
  67. /////////////////////////////////////////////////////////////////////////////! T4 l! l. P1 U
  68. // The one and only CRevAppApp object1 R! a& a; t4 N+ [
  69. " @0 d. C3 ?3 `6 d; J$ q; o
  70. CRevAppApp theApp;2 q0 F& G  H6 m

  71. ; g& d' A( r: q0 e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( t' Q8 n6 t: F
  73. {( d  G2 s$ t8 Q# |: C+ P9 X: H! k% G
  74.   int iEOF=0;
    9 }- Y) m& n1 E2 b, J( `1 y
  75.   char szTempName[MAX_PATH];
    0 W: G, ^. k. S3 S" U
  76.   *szFileName=0;2 E  o5 r# Q2 q" V) {
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 q1 K; m- }' {$ |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% ~& s# Z9 ~: h% ]7 m# _
  79.   {
    $ ?6 @2 y; i" N% U; R) {
  80.     strcpy(szFileName,&szTempName[1]);
    2 Q& P) K; f, ], |8 d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): z. c6 v7 ~( m* N% L* i/ s/ K* Z. H
  82.     {
    ! H- ]7 z, E5 K& B
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' R: ?* B0 W5 D7 J  {. G) F$ ^% L( S
  84.       strcat(szFileName," ");, `! s& T, ]1 a2 S0 a) R
  85.       strcat(szFileName,szTempName);
    * D8 p" _5 K+ j) u
  86.     }
      q- N$ d& x2 c. K' s/ D) \) Q: Q1 D
  87.     if(strlen(szFileName)>=1)
    # l5 a: S3 S3 r$ D  i
  88.     {
    . N! @$ o  i& l
  89.       szFileName[strlen(szFileName)-1]=0;
    " T: e: m8 w$ J( d1 P# A% K
  90.     }
    1 b; b" a3 Y! e9 ?: L! T
  91.   }
    ! Q; x! c$ X; E( l4 T: L, p
  92.   return szFileName;
    # g) n- b( I5 U5 V; `$ V/ A
  93. }
    5 o. Z1 V% o6 T( N: F7 ]

  94. ) S- V8 F# n) i7 J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ; s& r$ Z, f! @+ Y+ \
  96. {
    " h: Z2 B/ v* i0 B7 ^3 G! s
  97.   FILE *fp;. i# F& c2 |& D3 R- I- S9 z
  98.   char *key=NULL;* n& D1 N0 `0 T* j
  99.   char version[MAX_PATH];3 P) }" d* ]! p
  100.   LPUPDATEFILE file,olds;
    ( F# M/ o9 \& q8 ~3 ]1 v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;, ^, u; U( U% I, ?; T! L# G$ c0 Y

  102. " U4 v7 y' V( B0 J
  103.   UpdateList.clear();  d3 d+ f" |' L+ N: ]6 F+ z6 |7 g1 `
  104.   UpdateFile.clear();
    ( Z; F+ o8 \3 ~
  105.   if(GetFileAttributes(filename)==-1) return false;( s* |( n, m9 D% A) u
  106.   if(!(fp=fopen(filename,"r"))) return false;
    / ~7 o3 R+ t* S" L0 X
  107.   fscanf(fp,"%s",version);
    ' T1 Q) ?1 {- e4 V; t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    " i' [. I$ Z2 _. h3 M* r) b
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - ]$ y' ^, E' m/ ~! b4 J
  110.   {
    6 X8 \1 B4 O. P; g8 p! \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 l  M, \& l, J! |2 e
  112.     fscanf(fp,"%s",file->path);
    & X4 l! i  ?, |; u
  113.     ReadFileNames(fp,file->file);
    - [; ~8 O0 G# C/ h
  114.     strcpy(file->full,".");) p! n' m" A: V8 Y$ N
  115.     strcat(file->full,file->path);! ^6 N) C: e7 s9 c& _
  116.     strcat(file->full,file->file);. U) h& T4 a& n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    $ y0 s7 B! n, P, g5 i
  118.     {6 l# H- M- Q: l, |  K
  119.       file->vers=(float)atof(version);/ @6 m4 K0 W* N7 B( ^' f" r7 W
  120.       UpdateList.push_back(file->full);
    ' J$ s& O9 G2 v+ N! I; o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 k/ q$ C7 A! V* [( T/ _. K
  122.     }
    % a; ~. M0 ~( L4 I$ x
  123.     else! c# b, E/ l  j* y4 T
  124.     {4 m/ S( ^/ T! T* F5 \) ?
  125.       olds=(*p).second;
    8 h9 l9 I% v' s
  126.       if(olds->vers<(float)atof(version))
    : w9 I$ k4 |) W  K! h
  127.       {+ m! _# a8 H% \1 X# H. A: y! p
  128.         olds->vers=(float)atof(version);
    : ^/ H( N- B6 t: T6 j. Z6 Y
  129.       }
    1 e; |' C, L6 s, `9 o2 o- G; o
  130.       free(file);& j) N( A. F; S8 }) ~1 _. r
  131.     }) e2 e+ T3 H  E: j9 _
  132.   }
    9 I, I: D, \( j5 n# M
  133.   fclose(fp);  Q& ~- u3 K" L# m' S
  134.   return true;
    ) v) h0 o- l& `  p
  135. }: a* h! Z  [' e: y5 Y

  136. 8 x/ r* D( P4 F, q, F6 y0 A
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : A* |) _. Y4 f$ s0 V  B" x  c
  138. {9 z0 {/ ~4 E& D, ~5 v2 [
  139.   TCHAR  szFull[MAX_PATH];. C! `2 I# c# M7 Q- N% ?
  140.   TCHAR *token,*inter;
    / A6 o/ ^) A9 n5 r; r% n" W
  141.   *szPath=0;/ e6 Y: r* i8 x2 o6 ^" _8 I* S
  142.   strcpy(szFull,szFullPath);( h* A  C0 X/ E- _
  143.   token=strtok(szFull,"\\/");2 T: |7 |. M8 X; u8 w- k
  144.   inter=token;
    " ?  T& T) q* n0 ~2 c& x
  145.   while(token=strtok(NULL,"\\/"))
      E" h) k, i9 ~8 ]3 y* u
  146.   {
    * Q# [& p, A9 S9 f
  147.     strcat(szPath,inter);
    - ~; I) F: {, X, n" Z8 w
  148.     strcat(szPath,"\");8 e+ e+ s- E$ @/ |
  149.     inter=token;
    4 ?; ]5 y/ a, `2 Y$ q7 f0 q4 f
  150.   }& y! s; ~0 ^0 O0 R+ F, K" A; F/ p
  151.   return strlen(szPath);/ t$ K3 ]4 w* k2 Z
  152. }
    1 G0 x0 Q4 X5 q( e: _+ _4 d' w
  153. $ P3 x6 ]2 n* U" n& R9 \# q  X+ O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " V4 c* q. G' l- d3 I
  155. {
    : z! F% [, |) a6 ^: A" y
  156.   DWORD attrib=GetFileAttributes(Target);8 ]# t, _( }  a2 v; b: I
  157.   if(attrib!=-1)
    / _- k9 D; A' `& i/ }9 y3 a
  158.   {4 C8 i- `, u3 s: y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); U. P3 k9 ]! ]$ i4 |
  160.     {! R0 n9 M& V+ f/ j5 U1 z8 b3 l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; @0 X4 W5 M2 m2 V6 D
  162.       SetFileAttributes(Target,attrib);8 B' |. S% Z0 A$ T
  163.     }
    ( w" a4 F/ m7 V$ i' A  X. e
  164.   }  K' O- ?$ F. J/ Z8 I* ?" E
  165.   CopyFile(Source,Target,Erase);. O, t/ Q# h" @# h1 T  B6 u$ R
  166. }  Y9 U4 p6 s0 \; {9 k2 E& z6 g) F
  167. 9 _* m' E, E' @- Y% A$ d+ e: y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" m; g$ J$ [  i7 r% c" R
  169. {
    7 p" v8 m2 a# q# n  ~  u5 }7 s( b! k
  170.      FILE *fp;. E$ R# ?, Y1 D! W' ]0 h  ~  S* \
  171.      char  szBuffer[8192];; @. t7 r% a5 [" W- V
  172.   va_list  argptr;
    - s) o0 |/ u( u; h& b, p

  173. ' F" k; Z9 x# v: W
  174.         va_start(argptr,message);
    . H( d( V% {: ^
  175.         vsprintf(szBuffer,message,argptr);
    " n" n# C  L) \- y) K
  176.         va_end(argptr);& M7 Y7 [+ B: Z* U7 F
  177.   fp=fopen(FileName,"a");( ]- o, G! w0 l( F( I
  178.   if(fp)
    9 x4 W+ ~6 d7 {! B) _: B
  179.   {
    ) K; V" `4 Z% i) X
  180.     fprintf(fp,szBuffer);
    - m5 }7 p1 A$ ]7 E
  181.     fclose(fp);; l- S7 e% ^+ u# T
  182.           _flushall();
    & |1 L2 s' c: P: Q: J/ @
  183.   }
    0 L0 w0 d! q& S
  184. }5 a. R/ R2 l: K( j* @

  185. 5 t: j( ~! Z% g& [4 I. n) I
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    & O; c" k0 n) @& R) M2 D+ O4 {
  187. {" ?8 T3 X! Q8 P! y, ?
  188.      FILE *fp;" F% ~, f4 ?" t) N
  189.     DWORD  attrib;! {* Q9 o& r* ?4 ^6 p
  190.   attrib=GetFileAttributes(FileName);# Y" a4 N6 b* X6 r9 h' d
  191.   if(attrib!=-1)) g1 x9 |" B' w1 R. {7 z/ N5 [
  192.   {
    - }, a- T& E  O6 l6 W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ Z( b) ?# W; v( H. E/ p
  194.     if(!SetFileAttributes(FileName,attrib))4 ^% T0 Z9 G9 Z
  195.     {* U4 ]6 X# s$ z3 }! \
  196.       return FALSE;
    * }9 I1 o' e" B  u/ X2 D6 R2 b8 G
  197.     }  n: v* b" ~: ~$ w- c
  198.   }
    - i4 Y. l" _3 {' l8 {
  199.   fp=fopen(FileName,"wb");$ b2 n( T3 b; {( R. R7 R
  200.   if(fp)
    & G5 |' h3 M  e( Q: C
  201.   {
      k; v, P& u( \- }' E, {% J2 w* M
  202.     fclose(fp);+ u/ v4 c8 m- N  r
  203.   }3 C* q  k" f8 J8 z
  204.   return TRUE;, ?' X, P# d" `8 L1 S2 t
  205. }0 P& c) y/ V5 j7 S0 k* F+ L) b$ }

  206. # E! S$ _- K/ y. Q( r& k7 E
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " M1 M  a$ r  c) l; o9 Q
  208. {' y" d: A9 b: b. L7 |* }
  209.   char filename[MAX_PATH];! w8 T! O6 J! \9 ?/ H- x
  210.   LPUPDATEFILE file,olds;
    ! z7 z( `9 l% i
  211.   std::map<int,CString>::iterator i;
    ; S- f9 v) t  C8 E9 T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ J8 y  [; Y2 d3 ~9 c6 a
  213.   std::list<CString>::iterator l;* P" t5 l- ?$ O7 I% @2 W

  214. 7 ]8 Z, Y4 e$ A+ a* g5 \
  215.   if(bFirstUpdate)
    # P* R8 W1 i( T6 b3 w/ U" c  g6 n
  216.   {$ e+ N' u& n( u1 Y, M8 _- s' _8 B
  217.     dwCurrFile=0;
    ; G4 X9 ?8 h4 I
  218.     bFirstUpdate=FALSE;
    ; q1 V% @, E; Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! E+ u9 D2 d3 }' A6 Z8 P3 r3 `0 _
  220.     {8 W* I  M! F) i' ?( ^, C
  221.       dwTotalFiles=UpdateLocal.size();
    ; V0 m' B, S8 v6 H1 I$ b
  222.       dwDownLoaded=0;0 _" F& m# m) w5 A( t  m1 X
  223.       bSilentStep=FALSE;
    # z+ j" F0 R  I5 E  D2 n
  224.       bCompressed=TRUE;' w8 t3 N4 E$ J) T% ^
  225.       strExtLocal.Empty();
    ( b% g: T5 @) e: t' @
  226.       strFullName=(*i).second;
    # L2 Q; K- o4 y; }1 n/ T9 ?
  227.       dwProgramState=AP_CONNECT;
    1 z0 D& s0 {6 ~' J+ c
  228.       return TRUE;- F% ~" f1 s3 J7 [2 Z8 I
  229.     }
    ; Q1 F9 z5 y3 T9 A/ ]+ t- j$ ^, h
  230.   }+ V* `2 f: p2 N! U6 M- t3 G
  231.   else if(bRestartUpdater==FALSE)8 Q# e* X+ v  n" q- S  U2 k
  232.   {) ^3 x0 }7 M. O7 h
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 J5 ], r6 U8 T' o; ^, y" A
  234.     {
    , B/ {  U+ o3 ~+ I8 k/ e
  235.       file=(*p).second;
    / V; C0 o: [  ~7 _7 y# ]" v, ~$ ]
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 L) Y( d% Y% m7 i; I+ F: S
  237.       {1 e4 K0 B. ?; ?' S# ^8 R' b7 v
  238.         olds=(*p).second;# G; v: j3 [, q0 h+ _
  239.         olds->vers=file->vers;
    * G& h4 @+ u5 q( k/ E
  240.       }
    6 r" B* R4 R7 y
  241.       else
    6 n9 u5 g- L+ R7 l0 m1 h
  242.       {3 U& \5 G# {! v  x& d8 V
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : z% O( M$ j' H, J  l
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 Y5 g( ]/ U/ o0 \, O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 [. J% y( _0 T% |3 U8 ~
  246.       }- {9 B! o1 Y; @
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 }5 d& ]- w* X; [9 Z' F" A
  248.       sprintf(filename,"(%s)",file->file);
    - {7 E2 c2 c* g/ w% K; n8 N" C& l
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 O) f0 }& [7 t7 {
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 p2 A, a# ~- X2 }
  251.     }
    % }* |" k* U+ `+ S5 E4 z; v
  252.     dwCurrFile++;& J6 q' W1 D  f! w# S0 @5 k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); u2 n  \, A3 l/ z
  254.     {5 t) U6 l3 v- B% \/ w* v! e! w
  255.       bSilentStep=FALSE;3 f( N5 @( `) b& ~( V3 u# W
  256.       bCompressed=TRUE;3 y# o% O: `6 R
  257.       strExtLocal.Empty();4 b! v  I# m6 s& m( I
  258.       strFullName=(*i).second;
    ; r& J$ I; a. \/ B) c. ~9 `
  259.       dwProgramState=AP_CONNECT;$ N3 E1 E: W1 ~4 p
  260.       return TRUE;" C& Y& [: O+ R6 ~- y6 B" P+ }
  261.     }
    * ~4 {+ d9 Y) E' i6 S& l, W
  262.     if(!bRestartUpdater)% N3 v* r4 C7 ^7 G8 z2 l3 n
  263.     {8 b7 x( \! n& C- c* c, v4 g
  264.       int iCurrSize,iFileSize;& Q! D1 a: b, N
  265.       iCurrSize=0;
    & j) V0 S& ]) w; n+ X) R* k6 Y( V
  266.       iFileSize=UpdateList2.size();
    2 v3 g. C& ~  G; K, C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) r" U% f; N& d( {. y% b
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& P4 Y) Q: e( c3 M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    2 U! v3 s* T7 r8 i  H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" b; Y9 N8 E- U. T! V; C  a2 D
  271.       Fclearf(".\\update.dat");9 [9 L1 [% m6 i' D% F% u
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 w/ A* Q0 O5 e
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" ?4 r- v. U9 K) t4 E
  274.       {
    4 X) z3 I8 ^& E8 ~1 E5 Q3 z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * b! J  I4 {& N# Y3 k6 `
  276.         {, K7 s! J$ [) S" ?7 ~3 s1 {
  277.           file=(*p).second;' T  O' O4 j# R# B( K
  278.           sprintf(filename,"(%s)",file->file);( N) d5 ~- C  Q; B- \6 m: g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 w1 F3 V% n5 ]5 a/ m/ _9 s9 s  X
  280.           iCurrSize++;
    ' d5 i2 I8 C% _0 H3 E9 T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 R1 k* q4 Y  m0 e
  282.         }: e2 v, ~% l6 B
  283.       }
    " k: d) `0 J1 T  e  }
  284.       unlink(".\\update.txt");+ P8 |3 h" u- s3 M
  285.       unlink(".\\update.tmp");
    5 r& O! b  D. p2 m; \# K' y
  286.       Fclearf(".\\checkversion.dat");
    . h4 C+ h! v+ T0 \: R4 W& ]. D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 L: l: P6 z4 k. g0 s8 l* d
  288.       if(UpdateLocal.size())$ S- y- ^+ U$ ]" D' r4 ]
  289.       {3 \0 e/ {5 J: H8 ?$ L
  290.         UpdateLocal.clear();, p5 c2 z* |; o# O  z, ~8 m2 N
  291.       }
    ; E! x9 j. d+ H) i  g" N: f
  292.       if(UpdateFile3.size())7 E  {- ]! f: L7 G4 f7 E
  293.       {
    1 F! F# q9 |- i8 P+ {. Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), K- W1 G7 e" O: n' J# \
  295.         {. Q/ @$ `  X# n- f6 h9 J; E+ |
  296.           file=(*p).second;6 c: N0 ]2 A) d5 a7 K0 d
  297.           free(file);
    6 F8 V  y+ c) l. D0 f# Z: Y
  298.         }8 ]( [! f  a2 U3 T. u" C1 b! R
  299.         UpdateFile3.clear();" Z' T3 v  `  `2 r# t' o- ]
  300.         UpdateList3.clear();; i1 e0 Q/ \0 s- S
  301.       }
    / P$ j1 A/ d  g7 P9 D6 p
  302.       if(UpdateFile2.size())' q- B/ A0 o) ~# x% R, c7 X8 r
  303.       {3 k! ]+ L% ]8 F3 O6 f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # [* ^8 q# h. z& B
  305.         {
    9 d% a1 ?  P. k; W6 Y
  306.           file=(*p).second;
    " c& r: e$ r6 H4 p- S: J& H
  307.           free(file);, R1 F9 F0 L6 i4 f
  308.         }
    ' X" ]! z- A# {: J* S' e. t6 s1 h7 t
  309.         UpdateFile2.clear();; \! k5 Z3 Y8 A+ D7 s
  310.         UpdateList2.clear();: o3 C, k$ C$ m: S
  311.       }
    1 s5 Z9 `6 W5 ?* Y& h
  312.       if(UpdateFile1.size())
    4 K, ?& E/ t% L- `5 e) Z1 b
  313.       {8 i, p6 t2 _! ~- E, g" C" S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      j/ ]3 u. n) r6 I6 O6 H+ e- }
  315.         {
    ! I6 k/ Y5 j- A+ d8 s3 [
  316.           file=(*p).second;
    , O: k& ~2 N9 z) \9 N; w1 p
  317.           free(file);
    , h7 G% I$ g7 n& h% r3 s. j' j# K
  318.         }3 ?$ e1 S, k) s( C9 [; k% \
  319.         UpdateFile1.clear();
    5 B' X$ w# ]( X5 k8 I$ `# v- z
  320.         UpdateList1.clear();
    5 K6 ]& |$ u; k! j2 D- g* h
  321.       }
    ) J. Q1 v% f: m2 L8 D3 n- b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ B- K6 M. I0 j
  323.     }' ]0 I; G$ T) I$ F* v7 k
  324.   }( k' w1 P" J; D& V1 f9 Z) F3 w
  325.   return FALSE;  z% a* ^. J" a7 V4 W* G" `
  326. }
    " N2 \5 z8 Q! Z& b& H! C
  327. / R" |6 J/ f: V+ g# h
  328. void CRevAppApp::ClearAll(void)
    2 _" K4 F/ C' h5 @/ c/ D8 M6 `# T2 a1 v* O
  329. {9 g* @6 W. p5 @& h( }
  330.   LPUPDATEFILE file;6 ?3 Q  S& \+ \( E. R2 [+ m
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! c5 s6 B) v, c8 x
  332. # ^2 n5 y* t; p
  333.   if(UpdateLocal.size())' ^4 B- r3 K% D& n- Z
  334.   {
    + ?$ q( L" O5 j4 ]4 h
  335.     UpdateLocal.clear();
    & [. V4 f& e# N1 S# ^
  336.   }5 {( G, y0 A4 w3 E
  337.   if(UpdateFile3.size())  p" }9 D$ e8 G4 [9 D( [8 W/ ~2 D1 `
  338.   {" P4 `0 d+ p  P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * w0 d9 M' A7 z& D
  340.     {5 k" V/ e7 C* @0 G' }/ [; h
  341.       file=(*p).second;
    5 z& U3 w# y! u6 y
  342.       free(file);
    8 N/ L5 R( u+ ~$ Y0 z
  343.     }4 Z( T* E# x4 m6 g
  344.     UpdateFile3.clear();' A1 U6 o0 Q! Y' J
  345.     UpdateList3.clear();
    3 Q" p7 y6 x, N
  346.   }
    9 r( I+ w1 \  ^' ^7 X
  347.   if(UpdateFile2.size())+ M' h- J4 J# T" n8 p( e& K
  348.   {
    - P7 ^5 R+ t# q* {, I. {8 o! W/ L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! l. z! ~- D9 N; k4 b% n
  350.     {
    1 _, m" }, }' q  i9 w
  351.       file=(*p).second;
    ( R& B( ?' S$ w0 u. {: e, Y6 _" ^
  352.       free(file);
    8 g) v, P2 D! j
  353.     }! J/ r/ w" K/ H' r, A8 u) X1 C
  354.     UpdateFile2.clear();
    $ H9 C5 U" z0 b  O3 {' M% ^
  355.     UpdateList2.clear();
    " z) V1 E, T, Y
  356.   }; t$ n  v  W1 u6 ]4 n; j
  357.   if(UpdateFile1.size())+ q! S* s6 J/ _" n9 N4 \3 Z2 q, B
  358.   {
    " P. z6 E: N; C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 v1 v$ [! U1 ]$ T) a
  360.     {2 C# s: d1 \  _( f6 \
  361.       file=(*p).second;
    4 h) b8 Z% t: N: m) k
  362.       free(file);
    * W# E5 G4 c9 V! x! f
  363.     }
    ' l4 x) f% l+ P/ T. N; D
  364.     UpdateFile1.clear();
    ( R1 t9 A- P1 M. D& t, s
  365.     UpdateList1.clear();
    8 k3 t6 D" O) O
  366.   }2 A! y# b. e6 y/ L1 I
  367. }  
    " y+ W# ^  M3 B: h/ F. n
  368.   
    , N1 L' D* U5 u9 F: P9 o" {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 X1 Q- x5 r0 r
  370. {
    ; E1 O' E: `: H3 T
  371.   int c;
    , L. @; i& k, a
  372.   LPUPDATEFILE file1,file2;& d9 j9 b& H( |' E; j) K: c5 s
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ |; J9 ]" A: o& g
  374.   std::list<CString>::iterator l;
    1 t  ~) |' z- Y: a- |
  375. 6 i0 `7 r4 D4 G0 K" U4 a
  376.   UpdateLocal.clear();
    9 Q* y: }* V+ w: g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( A) f  R( b! g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . X' R6 Y* U2 O# ?8 X- {3 L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);4 \- }5 {1 A& p/ }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);& w# Z6 k1 Y( y2 ?7 ], `
  381.   if(UpdateFile3.size())
    ; [6 p1 `9 h- k0 J
  382.   {/ \8 z! ?  H4 }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  h" r) }. b8 y$ t; ^# j5 r
  384.     {
    / H7 n1 i& H  t& [3 [
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 {( }7 I* q+ ?( y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - u. ?4 M* E' [5 [
  387.       {. D# s% y( A0 t5 J, {
  388.         file1=(LPUPDATEFILE)(*p).second;* R: t# s7 m4 h& I
  389.         file1->vers=file2->vers;
    * T- W7 s7 h$ u6 U+ {
  390.       }/ {7 H7 N% c# L
  391.       else0 C7 h4 I) D% Q
  392.       {
    + G' Q; M. @1 X; w- s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : E2 P: @. y0 o. V
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    # T7 u) Y$ j6 r; I2 _. A1 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . `8 ]( S  Y4 [0 R& D
  396.       }
    5 z) R0 L* \- X" Y
  397.     }
    ; S: `- Z9 D" e4 Q7 j; O
  398.   }
    . ?/ d$ U& w2 |+ I0 e) Q6 Q7 p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)) P/ P) p! J9 f& e! m' b6 N, O
  400.   {. V" W# y* `% e" W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 e+ o# I1 S1 J. e  P3 T' r
  402.     {
    " I9 G" s* u) u
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 j3 H& G% N) J  y! h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 ^' U2 I; F4 v  \) U3 _" W
  405.       {" `9 B6 X0 n, y
  406.         file1=(LPUPDATEFILE)(*p).second;
    " H: A* v1 t6 _9 c2 ?$ F
  407.         if(file1->vers!=file2->vers)
    7 P, d! Y/ n6 k
  408.         {+ w6 i3 t4 d- y' |/ x" }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 m, i; V0 p$ r. G
  410.           c++;
    7 L9 H1 U+ j. ?" ^
  411.         }- z- o9 d# m7 O: u, [
  412.       }
    . C+ p7 D6 k# \
  413.       else
    $ T* `3 T1 w, d. ?7 S; d
  414.       {
    7 R1 W7 O$ y/ C9 n( X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% ?/ d9 Q8 ?2 @  `
  416.         c++;
    5 j0 h4 C' k, |  A! i
  417.       }: T4 ~6 K# i/ t/ X5 ~; Z+ m4 D* b
  418.     }9 e0 @# i3 x6 G; t# B2 T
  419.   }
    7 V' m! q4 G/ u
  420.   unlink(".\\DownLoad\\update.txt");, W; w+ g" K/ Z% u& P: e) m/ r0 `
  421.   if(UpdateLocal.size()) return TRUE;
    7 c1 j. z7 Z% C7 Z
  422.   else                   return FALSE;
    $ K9 |1 ^* I0 `
  423. }
    ; R! V( e3 N$ \- M9 a5 @6 l5 O
  424. ) ~3 P: k8 x/ R9 V* [1 Q) M
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    . ^# {6 ]" x9 u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( w* Z! T' x: K

  427.   w/ K  _4 _! n, X) U

  428. ! C9 v9 Z; M6 n' I) i  {
  429. 6 b0 W" [: `+ \- u
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), W, E3 h' d& w* E$ R% F: L1 u
  431. {
    . W4 M# H! }. k  ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 ?' e, j' ]3 V2 y' w# w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : _1 k& ~/ S+ a3 R# N
  434.   {5 q$ k7 O0 M& R5 @! F% C% d. u
  435.     char szLanguage[50];
    + p( H; I% q3 K- s; E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % f1 X5 i3 u0 v
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! W4 p) r+ V' A( G% Y- g- t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 P" f# C6 r/ _( ~/ }
  439.     else                                   m_iLanguage=ENGLISH;9 K, @# `0 H7 |, P# \$ z! a
  440.     char szRegister[100];. s. O- Z' z- _* [! l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , Z0 O" G, |& Z# [
  442.     strRegsName=szRegister;
    & h8 X* R  C' Q7 q/ B3 w) C$ R3 ~
  443.     char szPatchURL[100];- N# F' U  R6 V' r3 v
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! [' \1 H9 W2 L: m" u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 ]7 o" }. B% _" u3 L! S
  446.   }
    ' V& ]! K( p9 H1 {- }% |7 ?/ @
  447.   else
    ! x9 W; @, X7 U  ~9 B* B8 B4 x% y
  448.   {
    / y0 H$ P0 G; f3 t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) V+ L4 r' t% D* Y& p1 H! O& n2 w
  450.     strRegsName=DEFAULT_REG_URL;- J) \; k* v" p1 u  [; l0 v2 k* H1 I$ Q
  451.   }
    3 S7 p, f$ o" }# y
  452.   if(GetFileAttributes("hosts.ini")!=-1)3 k) ?1 i  ]0 [' m9 \. E. H4 q
  453.   {
    # `+ e' j% _0 T
  454.     char szIP[50];- E7 T# i2 \  J7 p; Z8 T# K  v
  455.     char szDIR[300];7 s2 F3 u: F' L4 ?1 r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* p& I" k% q: q/ \
  457.     {1 e* E8 \1 s" {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 [# R8 V" l' j5 P( M6 u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");" L5 ?3 u. `; P: Y4 M' q3 }
  460.       strHostName=szIP;( |% L' b+ v: m8 P8 j+ m8 f
  461.       strHostPath.Format("/%s",szDIR);8 |3 g% s+ B) x+ h2 ^
  462.     }( a! H6 S! h0 W7 i1 G
  463.     else
    3 `1 H: v3 J- I1 f" Y: x( w' \
  464.     {# g4 `7 m$ T7 K$ [! K8 k; |! C) `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ Y6 z. l3 `- u: F+ H
  466.       {4 K$ Z1 i" c9 J/ p5 l7 n0 q1 u4 Y
  467.         char szLanguage[50];% e8 W) R9 D. A/ z2 D& i/ k, y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( Z9 q# t1 B0 O8 a7 _- c1 t7 G  m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  a) j$ G+ A5 X' G, A9 [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % a7 I: I7 v% {* u! ^% r' s) z  D: n
  471.         else                                   m_iLanguage=ENGLISH;
    8 U3 x2 e  ]9 e& F7 Y) B0 C: P
  472.         char szRegister[100];" t6 A+ A/ d; U
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * B3 E# W  \! w: ]3 y3 w
  474.         strRegsName=szRegister;0 a/ p* }; M+ d. H9 T% i
  475.         char szPatchURL[100];1 Z% @. u. f$ g) I3 L0 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ g6 C, E0 f! F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 Z0 ?: ?  A2 ]1 f: j, K# p* k
  478.       }0 B4 v3 ~) P% c2 L( K4 |
  479.       else) ~! H" D( k, x: M
  480.       {
    7 R3 p* W# C' S+ l* a8 x* J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " e4 m/ d1 }  i3 Z' K5 p; s- |$ j
  482.         strRegsName=DEFAULT_REG_URL;
    1 Y$ a! o8 E0 B1 J8 X. u3 z
  483.       }
    3 Q% o2 m  C0 n8 O% {3 [  Y' n  h
  484.     }
    . X5 z$ c6 h% u4 D" d  [, R
  485.   }. \- o: j8 H! w1 [5 C  X, }
  486.   return true;2 |& @- Y/ j( w) }/ ^
  487. }
      n+ H7 w$ h$ z. ~: s3 {( q
  488. # w; q  E6 D. r0 s
  489. #include ".\ZLib\unzip.h"9 h! R/ [$ b% I: T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: w; W- ]. n7 q0 U6 T
  491. /////////////////////////////////////////////////////////////////////////////
    / @8 T$ U8 g5 Z, |1 T
  492. // CRevAppApp initialization
    9 v; C. U% j2 T7 h- I% r$ |9 B
  493. ) S4 I' o  `7 k: z/ d( S. ~, Z
  494. BOOL CRevAppApp::InitInstance()* r. t& Q  v! g( w6 f+ w0 P
  495. {1 |1 W( `2 b0 g7 I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) y  i  s  l7 d8 }
  497. # |( v9 [/ z+ z$ w8 P
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      u: N  [1 B2 n! t5 l/ A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 ~+ L- ?# @( ^, O
  500.   {: z% r6 q! O. J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 f" B8 K+ y9 M; R( h  c2 e& \) x
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 X' t) [: E2 C2 [' U9 r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 T- I3 p4 s7 }3 A- s/ n* k
  504.     {
    - N. L% b# x4 `
  505.       strcpy(szPath,szPathTarget);3 d6 B* X; c1 J7 {* e, i4 l& g
  506.       SetCurrentDirectory(szPath);
    * n$ ~$ w2 N- {( s) K
  507.     }( W4 ]/ E( n. \9 S0 C, i
  508.   }/ ~; Z* }) I6 P+ q6 i  O7 H
  509. #ifdef _DEBUG
    ! F6 h+ A  V' p6 r9 _/ ^0 |" F9 d
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 W* m2 S" J) G6 z2 E
  511. #else* A4 ]6 J; a# o; P2 D6 J: S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # C  e2 J+ J- y& D4 V, O
  513. #endif
    " v7 j" @: Y4 z1 w3 S# d
  514.   {6 z4 d! L6 c2 L: l2 r: L: U
  515.     char tempFileName[MAX_PATH];
    . W) Y, ], T: l/ ]
  516.     strcpy(tempFileName,szPathSource);7 o* r) g8 L% {4 S8 W4 z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % B8 I$ C) Q8 P3 `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 u4 o& G7 q: _* f. y% r2 e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ X$ v) Z- e" ]+ W6 U3 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! E# i. U) C/ Q
  521.     return TRUE;
    3 D; h8 q8 l& x# I5 F4 }
  522.   }6 _3 b2 q1 i! l/ o" f
  523.   // Nuke 0118: Delete run.exe
    " R5 \% W& B3 O& a+ x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " L! o- k) e! q0 J' N- n8 m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");: v6 ~% g3 i1 Y: T9 k
  526.   if(!ReadCfgFile("Config.ini"))
    ) Z+ |2 \- j! E# {3 c# t3 t
  527.   {( F: |. }7 p+ Z2 [: U# N0 c+ y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : I5 G; L/ m  n7 C* m) p
  529.     return TRUE;
    8 g, B' ^9 ]. h9 @: `4 j0 I' c$ H
  530.   }
    & E% i- \4 ?9 P" \2 A
  531.   HANDLE mutex;
    ; t8 V- l; L% P" s3 v7 u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' R' @5 N( J8 |8 z$ M
  533.   {( ]) G  A$ c7 I8 _, C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 a9 P9 _/ W. i$ X) \" a
  535.     {
    2 E7 S1 K; b. O8 M6 q0 Y" N# c
  536.       CloseHandle(mutex);
    ' a& N  H( C5 g, \5 N, Y5 m) N( r$ @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ a- E( U/ s- p$ O% M( k
  538.       return TRUE;$ t7 W) T0 L" X6 A
  539.     }* G5 x$ O7 B4 W  D& A
  540.   }  
    ' m: g3 T* a- _- g6 {' ^( o/ ?
  541.   CloseHandle(mutex);
    8 c& r& @3 x4 i6 H  D1 K

  542. . Y$ t. W2 G) p9 t7 U( c$ f% h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + j2 E! Z* m* S  r
  544. 3 w: h+ A' T' {# T# u
  545.         AfxEnableControlContainer();
    4 f2 _: ~: E! d
  546. ( x! k; H( c6 g1 q
  547.   bCanUpdate=FALSE;  |6 ?( u1 Q7 u' ?
  548.   dwStartUpSteps=1;7 m- S% p7 U  I0 [8 t, W5 Z9 l
  549.   dwProgramState=AP_NOTHING;3 G+ r9 A) ^5 B# w
  550. ) p7 _. J9 M4 `$ M5 Q  W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 F. x( ?2 i0 a1 X+ ~3 c

  552. ! }+ h* C6 w7 ^% Y# u+ M( Y
  553.         // Standard initialization: X2 L3 n* i+ I4 e9 b9 L+ T  t
  554.         // If you are not using these features and wish to reduce the size
    1 k  D( g% \% A! ~
  555.         //  of your final executable, you should remove from the following- y5 ?( H  k1 H& m5 Y1 B
  556.         //  the specific initialization routines you do not need.
    5 x. Q& I5 N0 v$ U2 s: c: n. b% m
  557. 1 _; F! k, f/ J
  558. #ifdef _AFXDLL$ ^7 p4 D- X; N6 }5 x" t# u6 l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - x5 M# C6 J: a6 l, }0 G4 T% b  |; M
  560. #else) t) j6 j+ g" u+ V) D; Y/ I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; P2 ?; g8 Q5 i4 ~1 v
  562. #endif
    6 J; @$ M! M8 n4 C! }1 t* B' h

  563. 1 i, B% o; H8 ?1 x3 ~/ T4 ?
  564.   dlg=new CRevAppDlg;  R- J: t; T2 Y. d, z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % g. y9 G2 v2 h4 K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% j& q  R) O) Y3 G  L3 p
  567.   m_pMainWnd=dlg;# P. L/ b. L8 B( s
  568. 2 H" S7 z( C6 P- ~! y% Z, b; f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( T. f. N& ]# _$ }
  570. , u/ Q2 H- `7 H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! F) m: Z9 S! g$ @2 l  X/ G
  572. //  ULONG_PTR gdiplusToken;& E# I2 x' J- R' s7 o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! h: |# W9 i( P7 m  r

  574. 8 ^( [$ V. {; h) e& h# i- s# c
  575. //        CRevAppDlg dlg;0 q: [5 Z! q! c3 T; \8 |3 |- G
  576. //        int nResponse = dlg.DoModal();0 d# n+ \5 k( s# z  N0 c+ M
  577. //        if (nResponse == IDOK)
    4 {! c6 j4 E$ p5 Q4 F4 K
  578. //        {
    # `- u! |8 A% T
  579. //                // TODO: Place code here to handle when the dialog is8 L# T1 I! p& k0 ]
  580. //                //  dismissed with OK
    + G" t0 R* R  Z5 }: b
  581. //        }0 M4 U; R* M% d+ u3 y* v9 g- O  ?
  582. //        else if (nResponse == IDCANCEL)
    2 X. E$ M, w! m8 C) D) `+ p3 U9 X
  583. //        {
    . I4 s8 x, }+ U& Y2 S5 u) c
  584. //                // TODO: Place code here to handle when the dialog is% r- O4 q. K+ L# @* O: {
  585. //                //  dismissed with Cancel. ^2 o' k7 }* c0 [3 }9 {
  586. //        }9 G8 q2 v! c  A7 Z( @# j

  587. ; U) }4 z! a- A8 Q4 j0 }
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 U5 u3 {9 U/ B( C- @
  589.         //  application, rather than start the application's message pump.7 g% S5 u6 r3 n: s( \+ A; J
  590.         return TRUE;
    ' q. M* L7 W; q2 [
  591. }
    - K2 t$ P/ p8 f
  592. % f7 B# z, o* |( P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % t. v) A2 |* P( j" M
  594. {
    ; e( A6 h; I+ o- p5 u1 P& F! R6 Y- o
  595.   int i;  P7 J( W! j: P
  596.   char *szRet;6 j$ n1 i4 T/ B& _  f; I9 r

  597. , F8 Q: ?' Y6 E, U! Q! `" F
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ ?# ~5 l+ [, Y4 e  v
  599.   if(sztoken)3 F6 {3 y: W7 w
  600.   {
    5 e" F0 C- |/ F% p
  601.     szRet=&sztoken[itoken];4 m* [+ O+ X* U& O% O! }
  602.     while(sztoken[itoken])
    ' o* }6 O) L( {
  603.     {
    7 A$ F) D# w8 ]4 I* S9 ^
  604.       for(i=0;i<(int)strlen(token);i++)5 ~5 n, f: V6 C- ]5 F& V/ P, O
  605.       {
    ! p  |: M- R. G5 O
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 p# k# J- M9 W! C" m+ [
  607.         {
    4 L8 `  C' Z; Z7 ]/ ]
  608.           sztoken[itoken++]=0;
    ; m, x7 {( V$ Q2 n  G1 X8 ?
  609.           sztoken[itoken++]=0;
    ( ]0 K* z+ I% M: ~' Q, [
  610.           return szRet;; L7 k: l; J; {$ T5 L* k4 a  ~- `, O
  611.         }
    3 `  \4 [0 ]1 o! L. `/ U1 l
  612.       }4 s: f8 Q& Q5 Q) v% `
  613.       itoken++;
    6 @5 Y+ ]- d5 d6 ^1 g9 L/ p$ H
  614.     }
    # C; P; `# r! I, l& x
  615.   }
    # q+ M) R0 w  E# n  r! C; j, c4 u
  616.   return NULL;, V, X0 B" T4 S; {1 O& e
  617. }! y# u. K# D2 ^5 R+ d' V
  618. ( e; v2 C# B) }# w* |
  619. void ProcessProc(long Total,long Current)
    # f7 Q0 p0 ?# |
  620. {8 {2 c) p* E3 h, _0 {9 m/ r- ], K
  621.         MSG msg;
    ) B9 h* n. O- O6 n- U8 |' ]7 ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 N% O: r9 N* g, o, w
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( H: I1 {; D2 F- F( m" J2 m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - J; ~  _/ t" V) k
  625.         {
    0 z5 a1 M9 H  ^5 u( |$ @
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # q: s" c" ]. d( n/ @
  627.                 {
    ( \& f0 L" P/ U+ Z: o
  628.                         return;( F3 Q+ _' B: ~5 L
  629.                 }) t; `9 p6 t& N" Z" E) {% T( D
  630.                 TranslateMessage(&msg);: k( H" y: M" d( g  q% u' C
  631.                 DispatchMessage(&msg);
    % C! }. _" k0 _4 e+ Y1 H
  632.         }        8 `( U. W/ I. l. a: z
  633. }% y$ _* \( M2 e4 k
  634. ! B: [, i2 Q4 t1 b' C8 _6 S% z
  635. BOOL bFirstChar=TRUE;
    ) ?* O$ r! `' d8 X7 }: j' P: w& l

  636. % d$ W, O! Q, N* p2 z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ) y9 Y6 O* t/ B' @7 V
  638. {
    $ E' e3 ^# [9 U8 O
  639.         // TODO: Add your specialized code here and/or call the base class: e) Q7 n7 E9 F8 T
  640.   switch(dwProgramState)) g+ e+ W1 U$ Z
  641.   {" a* Y$ K! ]$ D. A3 Y4 R8 X: x9 p) \
  642.   case AP_NOTHING:4 p- W; e: _5 b% Y
  643.     switch(dwStartUpSteps)$ V0 Z! }7 u" O" V* {- L
  644.     {7 ?" T" \, f! w5 l2 K; n0 g9 Q
  645.     case 1:
    ! s) z6 k( F! Q5 |
  646.       {
    - Q( u3 M& s% C! o2 ]! X
  647.         int i;1 @" c/ s" D% `( t' Q' M  u3 E( U
  648.         CDC *pCDC=dlg->GetDC();+ R2 e$ b$ E" u* U8 ?) o) n" [
  649.         HDC hdcwnd=pCDC->m_hDC;
    . k# C9 c9 T: [7 _6 Z
  650. //        Graphics graphics(hdcwnd);+ t9 |. ^8 h( P. S7 s1 q7 L
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 g0 L+ G3 k& P/ ]8 m2 g) [# b' z
  652. //        INT iWidth=bitmap.GetWidth();0 q, b, `  B9 _
  653. //        INT iHeight=bitmap.GetHeight();
    % W  D2 o. e6 u9 m  s7 a$ _
  654. //        Color color,colorTemp;
    1 v$ }. z3 |. i0 S2 c1 C4 ~& o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 y, r, I) G' p% i8 W% j) [
  656. //        {2 }1 d5 g* f6 |' V0 b+ t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) p) S# Z/ Q5 I7 t) h- G1 O% q  [
  658. //          {
    : h/ y, G+ Z3 g! h9 M0 I$ q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ L8 Z1 t2 @3 V! J
  660. //            colorTemp.SetValue(color.MakeARGB(
    $ Y1 {% _; i7 H3 A. d
  661. //              (BYTE)(255*iColumn/iWidth),
    7 S5 x& {5 z9 W5 q0 |/ A" R
  662. //              color.GetRed(),- A% a$ v% L2 V7 E  y1 R% H
  663. //              color.GetGreen(),
    + e, Y& G3 }; u; ~; u
  664. //              color.GetBlue()));9 d( v! a- {0 }* J1 n& ?( x
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 Y; Y+ Y9 i. u( z1 s- X
  666. //          }6 F  d0 x3 W+ \  s
  667. //        }
    * B& M# k9 L' ~. E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: T) Y  l$ C( V, ~% c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! w( k) H1 P$ |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ X5 E6 k1 r+ V8 F1 i
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* L- A; @: g3 Y" G* F
  672.         for(i=0;i<240;i+=8)! V: W& D7 `6 P8 l6 E
  673.         {
    3 h/ _2 Q+ w. R; Q7 t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , P! O7 j2 p- e) y& ^" s+ i- Q% `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' E. C8 m$ w3 L: P! q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) a/ J* c+ H, [
  677.           Sleep(33);
    6 t4 ?( D( Z  L6 f# Z( e
  678.         }8 ^6 r0 E( r% j6 |) `! Y
  679.         Sleep(1000);
    7 z. C5 J- a' h2 L0 T& @: E
  680.         for(i=240;i>0;i-=8)' p5 Z" t- K" B3 [8 [+ w
  681.         {: c" t! o6 ~5 m( w; S; P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  }2 e/ q8 b" N) U6 q8 y. T# p) N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ {; O6 j4 x( t
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 I  h) c; Z7 M# j  i
  685.           Sleep(33);7 U8 A5 F* j4 B7 u
  686.         }+ e$ j5 T- p1 X2 ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 S# _1 b; |& C6 G! w, [
  688.         dlg->ReleaseDC(pCDC);1 ~- a: g" g5 C
  689.         DeleteDC(hdctar);
    ( E% h3 X& w+ `5 a0 A4 L
  690.         DeleteDC(hdcsrc);1 M* c& ~* F6 k7 a& ]6 \
  691.         DeleteDC(hdcorg);
    0 l& }# L6 K: n* A6 k' \
  692.       }
    : o: ^3 H" \0 O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' _" b- c& L9 c2 Q4 [
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- f  |- |( f9 j8 [# i; H$ C
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - P3 C1 f+ u: I- n, T/ C4 G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    / ~) T  O0 S* H/ F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 G8 L8 ?0 b, L: V4 N' j1 e9 }
  698.       if(!Dn.Connected())' `2 y" s; f. r
  699.       {9 u2 Y( `, u( g0 o$ b
  700.         dwTotalFiles=1;
    : A7 @2 B8 ^) G5 x
  701.         dwDownLoaded=0;
    - q* G# \0 ^# O  R
  702.         bSilentStep=TRUE;% B) w# h8 Y) q2 L6 S# `% e, C
  703.         bCompressed=FALSE;
    8 k7 C: R# d; q! m
  704.         strExtLocal.Empty();* v5 x9 _5 {- I7 j
  705.         strFullName="readme.txt";
    3 Y3 j/ p+ R  C. H
  706.         dwProgramState=AP_CONNECT;7 `+ I* z; M* l
  707.       }/ E5 r& V7 e3 \! l6 S2 a1 m5 v# M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();- F( V/ B; w0 n9 ~
  709.       dwStartUpSteps=2;! k+ Y  f  O3 e+ n; L
  710.       break;  h7 B' g+ H8 s( s! W1 E! [( x5 z* S
  711.     case 2:# V/ m: h2 X, j4 d
  712.       {, j$ ?4 B7 n/ H
  713.         int iEOF;
    ( _1 c! O2 M$ ?8 i; m
  714.         FILE *fp;0 t4 F/ V: u* x4 B% i' w/ B/ \
  715.         char szString[512];; b& S/ R# M% @) d6 x& l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% Z# x6 w/ t- I- r
  717.         if(fp)
    ' W9 O/ A# I. s' z- \1 q
  718.         {
    - E( o" i4 m" R; y7 r
  719.           do
    + d5 o" M, A3 M; w# o3 k2 F
  720.           {4 W  j' ^' B) I9 a3 x: V4 d; U3 ~7 j
  721.             iEOF=fscanf(fp,"%s",szString);6 G( P4 \+ i8 r( R1 A
  722.             if(strlen(szString))9 l6 I% c$ i9 z' A' e
  723.             {
    8 J. ]0 y# q+ i( E! e/ x) _
  724.               if(bFirstChar)
    + z2 ~  D# |( U" U+ ^) d
  725.               {
    4 S7 c* _, C5 j  N
  726.                 bFirstChar=FALSE;4 A/ b) k- x7 @
  727.                 bConnectIsBig5=FALSE;
    5 h* G  r3 E  o! y5 i
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    / R4 \, Y# B* r. L9 ]: U
  729.               }6 u2 Y3 u) ~$ H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: G7 Z  _8 h/ d8 C+ K% N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! \4 ^% G' A8 L- R2 Z* h2 X
  732.               dlg->m_ListText.AddString(szString);
    1 d* M/ [! V& V1 S
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . ~( }- s* I( \. N, @
  734.               *szString=0;& {5 d8 z6 H/ z0 A9 b/ o
  735.             }
    ! j- q. f& `' m8 U- m* V
  736.           } while(iEOF!=EOF);$ u& N3 `% M" s2 }% [' U) t9 I
  737.           fclose(fp);- K7 F' v, c# h8 d3 O  D" }5 ]
  738.           unlink(".\\DownLoad\\readme.txt");
    5 f4 t/ @7 f  l; v
  739.           dwStartUpSteps=3;* z$ }& y$ g1 U% Q! U
  740.         }
    # `3 c4 l% h: Q; f' e
  741.       }" C  v* x% y. [* W1 }7 d
  742.       break;, F3 q  }# `) u! G; R! {/ q
  743.     case 3:
    4 T& e+ [/ l$ n3 s/ u, J" v
  744.       if(!Dn.Connected())
    # I3 n9 j  f+ K5 g) Y/ o
  745.       {$ p9 @& U4 O0 @$ ^8 A; Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& d' e1 D- n0 X$ }( k. \; q) s
  747.         dwTotalFiles=1;) a2 Y6 e6 D0 a- s, d& L* b
  748.         dwDownLoaded=0;
    ( m9 P( u) P% A" M
  749.         bSilentStep=TRUE;, n; b. [7 C3 M
  750.         bCompressed=FALSE;
    9 }7 a& ~5 ?7 s* _
  751.         strExtLocal.Empty();
    4 S' P' W* p- p- {
  752.         strFullName="checkversion.txt";3 w/ c+ j4 K# ~9 F" f6 y- ^
  753.         dwProgramState=AP_CONNECT;! M+ w0 S3 f) z" u# P3 _( X5 O
  754.       }
    8 @5 m/ ]. _4 A9 v8 M
  755.       dwStartUpSteps=4;
    ; c/ U5 V- r0 E8 W
  756.       break;; x5 o2 R, N, u
  757.     case 4:
    * v8 Q& R0 `3 z
  758.       {
    ' r  @5 ]" T% J3 h* P- @
  759.         FILE *fp;
    7 Q& [. J/ }2 d, S; d
  760.         char szString1[128];
    ! @0 s4 U0 ~* Z# Q' g1 m
  761.         char szString2[128];& _  `. k, [  r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 V5 n, N0 Z. E& v" Z$ k: p+ ^
  763.         if(fp)) [" f" q* i6 Y# q* r$ F
  764.         {
    5 i% T2 @" ^% ~+ w5 G
  765.           fscanf(fp,"%s",szString1);
    . G# b' p3 m( z
  766.           fclose(fp);
    $ H' Y; _4 Q: i. `; s- F
  767.           fCheckVersion=atof(szString1);0 o# L( M+ M4 }6 ]" A5 S/ u. d
  768.           fp=fopen(".\\checkversion.dat","r");
    3 }% ?( a' a% C6 K" K. ^
  769.           if(fp)0 {9 _( \3 }  h" X, W0 Y: {
  770.           {6 E9 k; Z' f3 j8 L7 ^2 r8 N6 X" {/ b+ c
  771.             fscanf(fp,"%s",szString2);) Q. ~8 L! _' i" V( R$ J
  772.             fclose(fp);
    ; G, O$ T) B& o1 _+ o9 L  q) @
  773.             if(atof(szString1)!=atof(szString2))4 R3 U% j0 Y1 X+ X! n5 e" p$ k
  774.             {
    + ]- v4 H8 D3 S/ A" H
  775.               if(!Dn.Connected()). H" v0 E; N5 _4 y. F
  776.               {
    $ g1 M$ r7 E; _
  777.                 bFirstUpdate=TRUE;
    5 j; Y, e1 Z' f2 r7 A& D2 w
  778.                 dwTotalFiles=1;
    ) i, T' `' n1 P( q. ^- k1 T, ?/ t
  779.                 dwDownLoaded=0;
    3 [  u; J1 C- I$ v) W6 @9 B% V6 l
  780.                 bSilentStep=FALSE;' j/ r# C8 w9 ~; x
  781.                 bCompressed=TRUE;
    6 R$ `! V' s( z& K8 G& |
  782.                 strExtLocal=".\\DownLoad\";6 P3 y2 C: [) A! E- G" K- M
  783.                 strFullName="update.txt";, u7 @& M! M4 U5 H) S
  784.                 dwProgramState=AP_CONNECT;
    0 M& s! V( `2 m( G- B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ f2 v7 k0 `' D$ ?5 N: N. W; E2 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% y; j. @" ]  v6 R. Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) K# l( |- c0 w) F6 U  o2 W+ q
  788. # W7 J6 H) Q" I, H5 b* ~) d$ O6 [. \
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 H4 ~: H3 C- N7 e, p
  790.                 unlink(".\\DownLoad\\checkversion.txt");& w4 [% r- H# b/ L8 X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    2 U- [' t: k5 Q; ?! z3 |$ X
  792.                 {
    , X2 ]$ I0 L$ I" Q  V1 G! w3 z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ T0 R: [$ I& T% X0 w5 u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% \! `- s) k  B# n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# X  r% o' s- x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* h) }* \7 A, e# r

  797. 0 @; r& j2 Y8 w4 I% s* J" {8 l6 e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& h9 b8 v4 L8 ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      X* R, u# p# D' |9 ?0 t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) U8 m" A8 k' ]; D5 P' i; J/ _' B
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" w9 m2 ~( Z" H: z
  802.                 }+ ^& {1 T; G1 ^
  803.                 dwStartUpSteps=5;
    8 o/ D* Y, T0 g, W2 ~) Y8 u. s
  804.               }6 h* q6 K4 B/ k) n1 M+ a* X9 n
  805.             }
    % T6 m' W$ B9 }0 ?, d* H) P( }' N
  806.             else" R  ~' I% c* T' t
  807.             {
    + r9 f- x4 r' ~9 \  _. \
  808.               unlink(".\\DownLoad\\checkversion.txt");# y. {. _3 e: R
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; C0 Z) }$ `  X: l' X6 s2 j2 U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ p" q, I! W$ b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 o4 g0 @+ T) i) v* f% v
  812. # R7 U: ~) j4 a0 d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 s* F' M7 q& Y/ O
  814.               dwStartUpSteps=99;
    ' g2 r' x* E8 N# r: p9 H6 t
  815.               bFinishUpdated=TRUE;* q1 c% }: u- K
  816.               bCanUpdate=TRUE;
    7 E% T1 c+ u) p5 _. L1 ~
  817.             }
    5 j- N, n" H8 o7 ]
  818.           }( f/ x  u, G- s; b; D" F
  819.           else* ]4 x3 _4 a: H* x
  820.           {/ ]: X0 m! K# t" A* v" M
  821.             if(!Dn.Connected())
    % X" V; P0 n/ b# t' q& S# W
  822.             {! V& n3 f) `0 U) F  e; {: J
  823.               bFirstUpdate=TRUE;
    ! D9 E$ [/ ]* M: Z, x1 c1 N
  824.               dwTotalFiles=1;
    / G: ~6 H1 ?6 \8 d- U
  825.               dwDownLoaded=0;
    5 m1 Z. U2 U5 L% b* j6 F; c
  826.               bSilentStep=FALSE;2 R  r# q9 s* C. x: z. y. _- ~( N
  827.               bCompressed=TRUE;
    & W2 y6 a) z0 f: u- v
  828.               strExtLocal=".\\DownLoad\";
      A3 i$ X: a, E! P0 [
  829.               strFullName="update.txt";
    ' m, ?. N, m) J2 x  w; D
  830.               dwProgramState=AP_CONNECT;4 Y3 _( Z4 n% e3 ^( m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 {# t* p  x  a9 @5 Q1 |+ \, W+ o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 J2 i" B3 D/ h; F* j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 i+ P' ?5 ~3 z. ~8 S! u% J
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( G" g$ y0 ?* |) t0 h# r+ k* `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # {- ~, C; P8 j1 f: U+ p1 E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 I& @- a9 D$ a9 `- i- z8 w
  837.               {
    8 z0 _/ v  C: Q- ]  a' q( T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + u7 {* ?) h+ @0 j% d$ H( s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ P9 k8 a% v9 S9 K$ u& k  R& D
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    % k% W! ^  T$ z& ]
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: n" T3 P1 D1 q+ _$ g) l
  842.                
    ' Q) K. }7 t% z8 q  [4 ?1 I$ I
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 f% s* ^' [6 {1 l( B% J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& A/ G8 n% _" W* ^1 S: W9 W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. k8 k- J% D' F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 a2 d8 H* H" E- K# K
  847.               }( a. i$ I% d8 N1 m* ^
  848.               dwStartUpSteps=5;
    $ j# g0 D: |" Z& s0 ^) J2 ~7 |! J
  849.             }
    : _% I6 D* I5 B) ?
  850.           }
    2 K" ]+ b- Z- s
  851.         }
    % L9 v4 `; G5 z* o$ h
  852.         else# m8 v: \0 c$ G* l, P* O
  853.         {
    . F4 {9 k4 \" Z$ M% Z+ u& M8 S
  854.           dwStartUpSteps=3;  t% I$ X+ a+ N! j& s+ ~
  855.         }
      c* t6 V! u/ {
  856.       }
    & r! n+ v5 R: y: o% T2 C0 @1 [7 M* W
  857.       break;
    . C# g" c! V: S. s2 F
  858.     case 5:8 k8 c  R7 X- s# e
  859.       {
    8 T* Q9 d1 c* {
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)8 H6 b  C- f) @) G4 W
  861.         {
    8 S+ k7 J- I4 `, \0 Y0 M
  862.           int opt_overwrite=1;
    3 G- ~+ |( x% S
  863.           int opt_do_extract_withoutpath=0;" a- G9 [; _" A5 r' d8 b
  864.           unzFile uf=NULL;  o' s& {: w- B' P3 @1 h

  865. 4 U, Z% n9 l2 G
  866.           uf=unzOpen("Wsa.zip");
    2 [- O$ l, R% q' P3 i, ~
  867.           if(uf); A2 s- O! c: e6 c
  868.           {0 H& p( }1 g. V
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    1 o# t- F7 |# N/ [  @' w+ A' C
  870.             unzClose(uf);
    % c: v2 ]: H. R/ \; F  x3 X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; i$ r3 K* |1 `
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    5 c  {& B% f7 c# M" L
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");) v  s: O! h. |% G5 A3 d) d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % T; N7 Y& [6 g, ?7 L$ [
  875.           }* y# l. @0 e; E) k" G" D
  876.           DeleteFile("Wsa.zip" );
    9 @: S$ i: u5 g6 Y, p/ @/ F
  877.         }
    ; Q" B- p' N  M* T3 O

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

% U5 X* c7 ~  d' n9 |
; ?" u- \+ i5 u3 S4 |( N/ x

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-15 10:50

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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