Imports System.IO
Imports UTS_Core.Security
Namespace UTSModule.License
'''
''' 类的作用:获取服务器信息
''' 创建人员:ML
''' Log编号:1
''' 修改描述:创建
''' 修改日期:2019-10-15
''' 修改人员:ML
'''
Public Class Server
''' Server文件字段枚举
Private Enum ServerKeyEnum
''' 客户名
VendorName
''' 数据库服务器地址
DataSource
''' 数据库服务器端口
DbPort
''' 数据库名
Database
''' 数据库用户名
DbUser
''' 数据库用户密码
DbPassword
''' Ftp地址
FtpHost
''' Ftp端口
FtpPort
''' Ftp用户名
FtpUser
''' Ftp用户密码
FtpPassword
End Enum
''' Server文件校验返回枚举值
Public Enum ServerCheckCodeEnum
''' 未找到Server
NoServer
''' 无法打开Server
CantOpenServer
''' 无效的Server
InvalidServer
''' 校验通过
CheckPass
End Enum
''' 存储Server校验返回值
Private _checkCode As ServerCheckCodeEnum
''' 存储Server所有信息
Private _server As Dictionary(Of String, String)
''' 服务器密钥
Private ReadOnly _serverAesKey As String = "^5GHo96tr5ff&*Hphg7665^fyu&uOhj0j[0[(jOIhI&g77FgghO*hhHY8h(*H&-987OygO8yg*yS$&G&aG9*&6g96*&7^RA65s76r*&&G(*(7(Gyg7#7Ff7F*&(*&&^"
'''Server所有可用字段
Private ReadOnly _serverKey() As String = {"VendorName", "DataSource", "DataPort", "Database", "DbUser", "DbPassword", "FtpHost", "FtpPort", "FtpUser", "FtpPassword"}
'''
''' 获取客户名
'''
''' 客户名
Public ReadOnly Property VendorName() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.VendorName))
End Get
End Property
'''
''' 获取服务器名
'''
''' 服务器名
Public ReadOnly Property DataSource() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DataSource))
End Get
End Property
'''
''' 获取服务器端口
'''
''' 服务器端口
Public ReadOnly Property DatabasePort() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DbPort))
End Get
End Property
'''
''' 获取数据库名
'''
''' 数据库名
Public ReadOnly Property Database() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.Database))
End Get
End Property
'''
''' 获取数据库用户名
'''
''' 数据库用户名
Public ReadOnly Property DatabaseUser() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DbUser))
End Get
End Property
'''
''' 获取数据库用户密码
'''
''' 数据库用户密码
Public ReadOnly Property DatabasePassword() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.DbPassword))
End Get
End Property
'''
''' 获取服务器端口
'''
''' 服务器端口
Public ReadOnly Property FtpPort() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpPort))
End Get
End Property
'''
''' 获取数据库名
'''
''' 数据库名
Public ReadOnly Property FtpHost() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpHost))
End Get
End Property
'''
''' 获取数据库用户名
'''
''' 数据库用户名
Public ReadOnly Property FtpUser() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpUser))
End Get
End Property
'''
''' 获取数据库用户密码
'''
''' 数据库用户密码
Public ReadOnly Property FtpPassword() As String
Get
Return _server.Item(_serverKey(ServerKeyEnum.FtpPassword))
End Get
End Property
'''
''' 读取Server文件所有内容,并进行解密,将解密后的内容存入Server字典中
'''
''' Server文件完整路径(含文件名)
''' 读取Server文件的状态
Public Function ReadServerFile(ByVal serverPath As String) As ServerCheckCodeEnum
Dim tmp As String
Dim fm As FileStream
Dim sr As StreamReader
If File.Exists(serverPath) Then
fm = New FileStream(serverPath, FileMode.Open)
sr = New StreamReader(fm)
_checkCode = ServerCheckCodeEnum.CheckPass
_server = New Dictionary(Of String, String)
Try
tmp = Aes128.DecryptStr(sr.ReadToEnd, _serverAesKey) 'utf8解密字符串
' tmp = ClsAes128.DecryptStr(sr.ReadToEnd, _serverAesKey, Unicode) 'Unicode解密字符串
Dim lines() As String = tmp.Split(Chr(13))‘回车切割
For i As Integer = 0 To lines.Length - 1
tmp = lines(i).Trim(Chr(10))'去除换行
Dim str As String() = tmp.Split("="c)
If str.Length = 2 Then
_server.Add(Trim(str(0)), Trim(str(1)))
Debug.Print($"Keys : {_server.Keys.ElementAt(_server.Count - 1)} Value : {_server.Values.ElementAt(_server.Count - 1)}")
Else
_checkCode = ServerCheckCodeEnum.InvalidServer
End If
Next
Catch ex As Exception
_checkCode = ServerCheckCodeEnum.InvalidServer
Finally
fm.Dispose()
sr.Close()
End Try
Else
_checkCode = ServerCheckCodeEnum.NoServer
End If
Return _checkCode
End Function
'''
''' 校验Server
'''
''' Server文件完整路径(含文件名)
''' 校验是否通过
Public Function CheckoutServer(ByVal serverPath As String) As ServerCheckCodeEnum
If ReadServerFile(serverPath) = ServerCheckCodeEnum.CheckPass Then
'校验厂商(根据是否存在厂商数据库校验)
If My.Computer.Network.Ping(_server.Item(_serverKey(ServerKeyEnum.DataSource))) Then
End If
End If
Return _checkCode
End Function
End Class
End Namespace