1 #Region "Microsoft.VisualBasic::16c58fe742f5317146a857926ca2d4a8, Microsoft.VisualBasic.Core\ApplicationServices\Tools\Network\Tcp\IPTools\IPEndPoint.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class IPEndPoint
35     
36     '         Properties: IPAddress, IsValid, Port, uid
37     
38     '         Constructor: (+4 OverloadsSub New
39     '         FunctionGetIPEndPoint, GetValue, ToString
40     
41     
42     ' /********************************************************************************/
43
44 #End Region
45
46 Imports System.ComponentModel
47 Imports System.Xml.Serialization
48
49 Namespace Net
50
51     ''' <summary>
52     ''' The object of <see cref="System.Net.IPEndPoint"/> can not be Xml serialization.
53     ''' (系统自带的<see cref="System.Net.IPEndPoint"></see>不能够进行Xml序列化)
54     ''' </summary>
55     ''' <remarks></remarks>
56     Public Class IPEndPoint
57
58 #Region "Public Property"
59
60         ''' <summary>
61         ''' Guid value of this portal information on the server registry.
62         ''' </summary>
63         ''' <returns></returns>
64         <Browsable(True)>
65         <Description("Guid value of this portal information on the server registry.")>
66         <XmlAttribute> Public Property uid As String
67
68         ''' <summary>
69         ''' IPAddress of the services instance.
70         ''' </summary>
71         ''' <returns></returns>
72         <Browsable(True)>
73         <Description("IPAddress of the services instance.")>
74         <XmlAttribute> Public Property IPAddress As String
75
76         ''' <summary>
77         ''' Data port of the services instance.
78         ''' </summary>
79         ''' <returns></returns>
80         <Browsable(True)>
81         <Description("Data port of the services instance.")>
82         <XmlAttribute> Public Property Port As Integer
83 #End Region
84
85         ''' <summary>
86         ''' This parameterless constructor is required for the xml serialization.(XML序列化所需要的)
87         ''' </summary>
88         ''' <remarks></remarks>
89         Public Sub New()
90         End Sub
91
92         ''' <summary>
93         '''
94         ''' </summary>
95         ''' <param name="IPAddress">IPAddress string using for create object using method <see cref="System.Net.IPAddress.Parse(String)"/></param>
96         ''' <param name="Port"><see cref="System.Net.IPEndPoint.Port"/></param>
97         Sub New(IPAddress As String, Port As Integer)
98             Me.Port = Port
99             Me.IPAddress = IPAddress
100         End Sub
101
102         ''' <summary>
103         '''
104         ''' </summary>
105         ''' <param name="str">Required format string: ``IPAddress:Port``</param>
106         ''' <remarks></remarks>
107         Sub New(str As String)
108             Dim Tokens As String() = str.Split(":"c)
109
110             If Tokens.IsNullOrEmpty OrElse Tokens.Length < 2 Then
111                 Throw New DataException(str & " is not a valid IPEndPoint string value!")
112             End If
113
114             IPAddress = Tokens.First
115             Port = CInt(Val(Tokens(1)))
116         End Sub
117
118         Sub New(ipEnd As System.Net.IPEndPoint)
119             Call Me.New(ipEnd.ToString)
120         End Sub
121
122         ''' <summary>
123         ''' http://IPAddress:&lt;Port>/
124         ''' </summary>
125         ''' <returns></returns>
126         Public Overrides Function ToString() As String
127             Return $"http://{IPAddress}:{Port}/"
128         End Function
129
130         ''' <summary>
131         ''' Convert this networking end point DDM into the <see cref="System.Net.IPEndPoint"/>
132         ''' </summary>
133         ''' <returns></returns>
134         Public Function GetIPEndPoint() As System.Net.IPEndPoint
135             Return New System.Net.IPEndPoint(System.Net.IPAddress.Parse(ipString:=IPAddress), Port)
136         End Function
137
138         Public Function GetValue() As String
139             Return IPAddress & ":" & Port.ToString
140         End Function
141
142         ''' <summary>
143         ''' 格式是否正确
144         ''' </summary>
145         ''' <returns></returns>
146         Public ReadOnly Property IsValid As Boolean
147             Get
148                 Return Port > 0 AndAlso System.Net.IPAddress.TryParse(IPAddress, Nothing)
149             End Get
150         End Property
151
152         Public Shared Narrowing Operator CType(ep As IPEndPoint) As System.Net.IPEndPoint
153             Return ep.GetIPEndPoint
154         End Operator
155     End Class
156 End Namespace