From 2df2d882fa5f2a57924c736f69753c6531852e95 Mon Sep 17 00:00:00 2001 From: cyrax Date: Mon, 12 Nov 2018 18:00:59 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20ID=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F.=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B8=20=D0=BF=D1=80=D0=BE=D0=BA=D1=81=D0=B8.=20?= =?UTF-8?q?=D0=9D=D1=83=D0=B6=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=8B=20=D1=81=20INI-=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LVNC-RS/IniFile.vb | 98 +++++++++++++++++++++++++++++ LVNC-RS/LVNC-RS.vbproj | 1 + LVNC-RS/Services.vb | 65 ++++++++++++++++--- LVNC-RS/frmLVNC-RS-Main.Designer.vb | 4 +- LVNC-RS/frmLVNC-RS-Main.vb | 31 ++++++++- 5 files changed, 187 insertions(+), 12 deletions(-) create mode 100644 LVNC-RS/IniFile.vb diff --git a/LVNC-RS/IniFile.vb b/LVNC-RS/IniFile.vb new file mode 100644 index 0000000..8db9f1d --- /dev/null +++ b/LVNC-RS/IniFile.vb @@ -0,0 +1,98 @@ +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Text + +Namespace Ini + Public Class IniFile +#Region "DLL Import" + ''' + ''' Записывает ключ в заданный раздел INI-файла. + ''' + ''' Имя раздела. + ''' Имя ключа. + ''' Значение ключа. + ''' Путь к INI-файлу. + + Private Shared Function WritePrivateProfileString(ByVal section As String, ByVal key As String, ByVal value As String, ByVal filePath As String) As Long + End Function + + ''' + ''' Считывает ключ заданного раздела INI-файла. + ''' + ''' Имя раздела. + ''' Имя ключа. + ''' + ''' + ''' + ''' Путь к INI-файлу. + ''' С помощью конструктора записываем путь до файла и его имя. + + Private Shared Function GetPrivateProfileString(ByVal section As String, ByVal key As String, ByVal [default] As String, ByVal retVal As StringBuilder, ByVal size As Integer, ByVal filePath As String) As Integer + End Function +#End Region '/DLL Import + +#Region "Constructor" + ''' + ''' Имя файла. + ''' + Private IniPath As String + + ''' + ''' Читаем ini-файл и возвращаем значение указного ключа из заданной секции. + ''' + ''' + Public Sub New(ByVal iniPath As String) + Me.IniPath = New FileInfo(iniPath).FullName.ToString + End Sub +#End Region + +#Region "INI-file Methods" + ''' + ''' Проверяет, что заданный ключ существует в INI-файле. + ''' + ''' Имя раздела. + ''' Имя ключа. + Public Function KeyExists(ByVal section As String, ByVal key As String) As Boolean + Return (Me.ReadKey(section, key).Length > 0) + End Function + + ''' + ''' Читает значение заданного ключа в заданном разделе INI-файла. + ''' + ''' Имя раздела. + ''' Имя ключа. + Public Function ReadKey(ByVal section As String, ByVal key As String) As String + Dim retVal As New StringBuilder(&HFF) + IniFile.GetPrivateProfileString(section, key, "", retVal, &HFF, Me.IniPath) + Return retVal.ToString() + End Function + + ''' + ''' Создаёт заданный ключ в заданном разделе. Если раздел не существует, он будет создан. + ''' + ''' Имя раздела. + ''' Имя ключа. + ''' Значение ключа. Если NULL, то ключ будет удалён. Если String.Empty, то присвоится пустое значение. + Public Sub WriteKey(ByVal section As String, ByVal key As String, ByVal value As String) + IniFile.WritePrivateProfileString(section, key, value, Me.IniPath) + End Sub + + ''' + ''' Удаляет заданный ключ из заданного раздела INI-файла. + ''' + ''' Имя раздела. + ''' Имя ключа. + Public Sub DeleteKey(ByVal section As String, ByVal key As String) + Me.WriteKey(section, key, Nothing) + End Sub + + ''' + ''' Удаляет заданный раздел INI-файла. + ''' + ''' Имя раздела. + Public Sub DeleteSection(ByVal section As String) + Me.WriteKey(section, Nothing, Nothing) + End Sub +#End Region + End Class +End Namespace diff --git a/LVNC-RS/LVNC-RS.vbproj b/LVNC-RS/LVNC-RS.vbproj index 0aef6df..059c7f4 100644 --- a/LVNC-RS/LVNC-RS.vbproj +++ b/LVNC-RS/LVNC-RS.vbproj @@ -91,6 +91,7 @@ + Form diff --git a/LVNC-RS/Services.vb b/LVNC-RS/Services.vb index 82b9fa3..29a4adf 100644 --- a/LVNC-RS/Services.vb +++ b/LVNC-RS/Services.vb @@ -1,7 +1,13 @@ Module Services - Public sRunTimeDir As String = getRunTimeDir() & "\LVNC-RS" - Public sConfigFile As String = sRunTimeDir & "\lvnc-rs.ini" - Public lSupportID As Long = 0 + Private sRunTimeDir As String = getRunTimeDir() & "\LVNC-RS" + Private oConfigFile As New Ini.IniFile(sRunTimeDir & "\lvnc-rs.ini") + + Public sSupportID As String = String.Empty + Public sSupportPasswd As String = String.Empty + Public byProxyStatus As Byte = 0 + + Public sProxyHost As String = oConfigFile.ReadKey("repeater", "host") + Public sProxyPort As String = oConfigFile.ReadKey("repeater", "serverport") Private aExecResources(,) As String = { {"lvnc_rs_ini", "\lvnc_rs.ini"}, @@ -72,7 +78,7 @@ Public Sub getSupportID() Dim aNics() As Net.NetworkInformation.NetworkInterface = Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces() Dim sMAC As String = String.Empty - Dim lID As Long = 0 + Dim iID As Integer = 0 For Each nic As Net.NetworkInformation.NetworkInterface In aNics If (nic.NetworkInterfaceType = Net.NetworkInformation.NetworkInterfaceType.Ethernet Or @@ -91,17 +97,58 @@ Next i Dim aMAC() = strBuilder.ToString.Split(":") - Dim n As Long = 0 + Dim n As Integer = 0 For i As Integer = 0 To UBound(aMAC) n = Convert.ToInt32(aMAC(i), 16) Debug.Print(n) - lID = ((lID * 16) + n) Mod 99999999 + iID = ((iID * 16) + n) Mod 99999999 - If lID < 99999999 Then - lID = lID + 10000000 + If iID < 99999999 Then + iID = iID + 10000000 End If Next - lSupportID = lID + sSupportID = iID.ToString + End Sub + + Public Sub getSupportPasswd() + Dim rndGen As New System.Random + + sSupportPasswd = rndGen.Next(1000, 10000).ToString + End Sub + + Public Sub checkProxy(ByRef sHost As String, ByRef sPort As String) + Dim hostEntry As Net.IPHostEntry + Dim ipAddress As Net.IPAddress + Dim epHost As Net.IPEndPoint + Dim socket As Net.Sockets.Socket + + Try + hostEntry = Net.Dns.GetHostEntry(sHost) + Catch ex As Exception + byProxyStatus = 2 + + Exit Sub + End Try + + If hostEntry.AddressList.Count > 0 Then + ipAddress = hostEntry.AddressList.FirstOrDefault + epHost = New Net.IPEndPoint(ipAddress, Convert.ToInt32(sPort)) + socket = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp) + + Try + socket.Connect(epHost) + Catch ex As Exception + + End Try + End If + + If socket.Connected Then + byProxyStatus = 1 + Else + byProxyStatus = 2 + End If + + socket.Disconnect(False) End Sub End Module diff --git a/LVNC-RS/frmLVNC-RS-Main.Designer.vb b/LVNC-RS/frmLVNC-RS-Main.Designer.vb index 9c8e4f0..448649e 100644 --- a/LVNC-RS/frmLVNC-RS-Main.Designer.vb +++ b/LVNC-RS/frmLVNC-RS-Main.Designer.vb @@ -132,7 +132,7 @@ Partial Class frmLVNCRSMain 'tsLabelSrvStatus ' Me.tsLabelSrvStatus.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.tsLabelSrvStatus.Margin = New System.Windows.Forms.Padding(0) + Me.tsLabelSrvStatus.Margin = New System.Windows.Forms.Padding(2, 0, 2, 0) Me.tsLabelSrvStatus.Name = "tsLabelSrvStatus" Me.tsLabelSrvStatus.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never Me.tsLabelSrvStatus.Size = New System.Drawing.Size(0, 21) @@ -143,7 +143,7 @@ Partial Class frmLVNCRSMain Me.tsButtonRunAs.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image Me.tsButtonRunAs.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None Me.tsButtonRunAs.ImageTransparentColor = System.Drawing.Color.Magenta - Me.tsButtonRunAs.Margin = New System.Windows.Forms.Padding(0, 0, 1, 0) + Me.tsButtonRunAs.Margin = New System.Windows.Forms.Padding(2, 0, 2, 0) Me.tsButtonRunAs.Name = "tsButtonRunAs" Me.tsButtonRunAs.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never Me.tsButtonRunAs.Size = New System.Drawing.Size(23, 21) diff --git a/LVNC-RS/frmLVNC-RS-Main.vb b/LVNC-RS/frmLVNC-RS-Main.vb index 68f5f60..6eac379 100644 --- a/LVNC-RS/frmLVNC-RS-Main.vb +++ b/LVNC-RS/frmLVNC-RS-Main.vb @@ -2,6 +2,8 @@ Private Sub frmLVNCRSMain_Load(sender As Object, e As EventArgs) Handles Me.Load Services.checkRunTimeComponents() Services.getSupportID() + Services.getSupportPasswd() + Services.checkProxy(Services.sProxyHost, Services.sProxyPort) If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then tsButtonRunAs.Image = Global.LVNC_RS.My.Resources.is_admin_on @@ -9,7 +11,16 @@ tsButtonRunAs.Image = Global.LVNC_RS.My.Resources.is_admin_off End If - txtLVNCSupportID.Text = Format(Services.lSupportID, "### ### ##0") + If Services.byProxyStatus = 1 Then + tsLabelSrvStatus.Image = Global.LVNC_RS.My.Resources.online + Else + tsLabelSrvStatus.Image = Global.LVNC_RS.My.Resources.offline + End If + + txtLVNCSupportID.Text = Format(Convert.ToInt32(Services.sSupportID), "### ### ##0") + txtLVNCSupportPasswd.Text = Services.sSupportPasswd + + tCheckTimer.Enabled = True End Sub Private Sub tsButtonRunAs_Click(sender As Object, e As EventArgs) Handles tsButtonRunAs.Click @@ -40,4 +51,22 @@ ' 'Application.Exit() End Sub + + Private Sub frmLVNCRSMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown + Me.Show() + + Dim sProxy As String = "digital-freak.ru" + Dim sport As String = "5900" + Services.checkProxy(sProxy, sport) + End Sub + + Private Sub tCheckTimer_Tick(sender As Object, e As EventArgs) Handles tCheckTimer.Tick + Services.checkProxy(Services.sProxyHost, Services.sProxyPort) + + If Services.byProxyStatus = 1 Then + tsLabelSrvStatus.Image = Global.LVNC_RS.My.Resources.online + Else + tsLabelSrvStatus.Image = Global.LVNC_RS.My.Resources.offline + End If + End Sub End Class