#Region "Microsoft.VisualBasic::00cdc56eb0cf68da892ddfc0af10678c, ComputingServices\Taskhost.d\Extensions.vb" ' Author: ' ' asuka (amethyst.asuka@gcmodeller.org) ' xie (genetics@smrucc.org) ' xieguigang (xie.guigang@live.com) ' ' Copyright (c) 2018 GPL3 Licensed ' ' ' GNU GENERAL PUBLIC LICENSE (GPL3) ' ' ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or ' (at your option) any later version. ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with this program. If not, see . ' /********************************************************************************/ ' Summaries: ' Module Extensions ' ' Properties: EnvironmentLocal, IPAddress, PublicShared ' ' Constructor: (+1 Overloads) Sub New ' Function: [AddressOf], AddressEquals, (+2 Overloads) Invoke ' ' ' /********************************************************************************/ #End Region Imports System.Runtime.CompilerServices Namespace TaskHost Public Module Extensions ''' ''' Services running on a LAN? ''' Dim _local As Boolean = False ''' ''' 假若这个参数为真,则说明服务只是运行在局域网之中,则只会返回局域网的IP地址 ''' 假若为假,则说明服务是运行在互联网上面的,则会查询主机的公共IP地址,调试的时候建议设置为真 ''' ''' Public Property EnvironmentLocal As Boolean Get Return _local End Get Set(value As Boolean) _local = value If _local Then _IPAddress = Net.AsynInvoke.LocalIPAddress Else _IPAddress = GetMyIPAddress() End If End Set End Property Public ReadOnly Property IPAddress As String Sub New() #If DEBUG Then EnvironmentLocal = True #Else EnvironmentLocal = False #End If End Sub Public ReadOnly Property PublicShared As System.Reflection.BindingFlags = System.Reflection.BindingFlags.Public Or System.Reflection.BindingFlags.Static ''' ''' ''' ''' ''' NameOf ''' Public Function [AddressOf](type As Type, name As String) As InvokeInfo Dim method = type.GetMethod(name, bindingAttr:=PublicShared) Dim info As New InvokeInfo With { .assm = FileIO.FileSystem.GetFileInfo(type.Assembly.Location).Name, .Name = method.Name, .FullIdentity = type.FullName } Return info End Function Public Function Invoke(info As InvokeInfo, host As TaskRemote) As Object If host Is Nothing Then Return TaskInvoke.TryInvoke(info) Else Dim rtvl = host.Invoke(info) Dim entry = info.GetMethod Return rtvl.GetValue(entry.ReturnType) End If End Function ''' ''' DirectCast ''' ''' ''' ''' ''' Public Function Invoke(Of T)(info As InvokeInfo, host As TaskRemote) As T Return DirectCast(info.Invoke(host), T) End Function Public Function AddressEquals(a As Object, b As Object) As Boolean Return ObjectAddress.AddressOf(a) = b End Function End Module End Namespace