Imports System.Management
Imports System.Net
Imports UTS_Core.Database
Imports UTS_Core.UTSModule
Imports UTS_Core.UTSModule.DbTableModel.Manage
Public Class ServiceConfig
Private _privateIP As String
Private _publicIP As String
Private _mac As String
Private ReadOnly _dsIndex As Integer
Private ReadOnly _dsName As String
Private ReadOnly _dsVerString As String
Private _usVerString As String
Private ReadOnly _usName As String
Private _dsVer As Version
Private _usVer As Version
Sub New()
_dsIndex = CInt(UtsRegistry.DataServiceIndex)
_dsName = My.Application.Info.ProductName
_dsVer = My.Application.Info.Version
_dsVerString = My.Application.Info.Version.ToString
_usName = UtsRegistry.UpdateServiceName
_usVerString = UtsRegistry.UpdateServiceVersion
If Version.TryParse(_usVerString, _usVer) = False Then
_usVer = New Version(0, 0, 0, 0)
End If
BarnchNet = UtsRegistry.BarnchNet
If Integer.TryParse(UtsRegistry.Roles, Roles) = False Then
Roles = 0
End If
IsDBProxyConn = 0
CacheCount = 0
DbStatus = 0
FtpStatus = 0
NetworkNeiborhood = ""
UsConnected = 0
InitMacAndLocalIP()
End Sub
Public ReadOnly Property DsIndex() As Integer
Get
Return _dsIndex
End Get
End Property
'''
''' 数据服务的数据服务的名称
'''
'''
Public ReadOnly Property DsName() As String
Get
Return _dsName
End Get
End Property
'''
''' 数据服务的版本字符串
'''
'''
Public ReadOnly Property DsVerString() As String
Get
Return _dsVerString
End Get
End Property
'''
''' 更新服务的版本字符串
'''
'''
Public Property UsVerString() As String
Get
Return _usVerString
End Get
Set(value As String)
_usVerString = value
If Version.TryParse(_usVerString, _usVer) = False Then
_usVer = New Version(0, 0, 0, 0)
End If
End Set
End Property
'''
''' 数据服务的版本
'''
'''
Public ReadOnly Property DsVersion() As Version
Get
Return _dsVer
End Get
End Property
'''
''' 更新服务的版本
'''
'''
Public ReadOnly Property UsVersion() As Version
Get
Return _usVer
End Get
End Property
'''
''' 更新服务的名称
'''
'''
Public ReadOnly Property UsName() As String
Get
Return _usName
End Get
End Property
'''
''' 设备的局域网IP
'''
'''
Public ReadOnly Property PrivateIP() As String
Get
Return _privateIP
End Get
End Property
'''
''' 设备的MAC地址
'''
'''
Public ReadOnly Property Mac() As String
Get
Return _mac
End Get
End Property
'''
''' 与更新服务的连接状态
'''
'''
Public Property UsConnected As Integer
'''
''' 设备运行中产生的异常
'''
'''
Private Property ErrMsg As String
'''
''' 局域网中与主机的连接状态
'''
'''
Public Property IsDBProxyConn As Integer
'''
''' 设备加入的子网名称
'''
'''
Public Property BarnchNet As String
'''
''' 当前设备在局域网中的角色
'''
'''
Public Property Roles As Integer
'''
''' 网上邻居集合
'''
'''
Public Property NetworkNeiborhood As String
'''
''' 当前缓存表字段数量
'''
'''
Public Property CacheCount As Integer
'''
''' 云端数据库连接状态
'''
'''
Public Property DbStatus As Integer
'''
''' Ftp服务器连接状态
'''
'''
Public Property FtpStatus As Integer
'''
''' 私有IP地址变化
'''
'''
Public Event PrivateIPChanged(ip As String)
'''
''' MAC地址变化
'''
'''
Public Event MACChanged(mac As String)
Public Sub UpdateErrMsg(type As String, msg As String)
ErrMsg = $"{type},{msg}"
End Sub
'''
''' 初始化MAC地址与获取本地IP
'''
Public Sub InitMacAndLocalIP()
' Dim ip As String
Dim mac As String
Dim searcher As New ManagementObjectSearcher("select * from win32_NetworkAdapterConfiguration")
Dim moc2 As ManagementObjectCollection = searcher.Get()
For Each mo As ManagementObject In moc2
If CBool(mo("IPEnabled")) Then
mac = mo("MACAddress").ToString()
If String.Compare(_mac, mac) <> 0 Then
_mac = mac
'触发MAC地址变化
RaiseEvent MACChanged(_mac)
End If
Dim a() As String = CType(mo("IpAddress"), String())
Dim address As IPAddress = Nothing
For Each ip As String In a
If IPAddress.TryParse(ip, address) Then
'使用IPV4地址
If address.AddressFamily = Sockets.AddressFamily.InterNetwork Then
If String.Compare(_privateIP, ip) <> 0 Then
'触发IP地址变化
_privateIP = ip
RaiseEvent PrivateIPChanged(_privateIP)
End If
Return
End If
End If
Next
End If
Next
End Sub
'''
''' 上传服务信息至数据库
'''
Public Sub UpdateServiceInfo()
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
db.Open()
Dim cmdText As String
Dim tbName As String = DataServiceListTable.TableName
Dim filed As New Dictionary(Of String, String)
filed.Add($"{DataServiceListTable.ColNames.ServiceVersion}", DsVerString)
filed.Add($"{DataServiceListTable.ColNames.CacheCount}", CacheCount.ToString)
filed.Add($"{DataServiceListTable.ColNames.IsDBProxyConn}", IsDBProxyConn.ToString)
filed.Add($"{DataServiceListTable.ColNames.NetworkNeiborhood}", NetworkNeiborhood)
If String.IsNullOrEmpty(ErrMsg) = False Then
filed.Add($"{DataServiceListTable.ColNames.ErrMsg}", ErrMsg)
ErrMsg = String.Empty
End If
Dim condition As String = $"`{DataServiceListTable.ColNames.ID}` = {_dsIndex}"
cmdText = db.CmdHelper.DbUpdate(UtsDb.RemotePublicDb, tbName, filed, condition)
Try
db.ExecuteNonQuery(cmdText)
Catch ex As Exception
ServiceLog.WriteErrorLog($"Update ServiceTable Error:{ex.Message}")
End Try
db.Close()
End Using
End Sub
End Class