196 lines
6.5 KiB
VB.net
196 lines
6.5 KiB
VB.net
Imports System.Net
|
||
Imports System.Threading
|
||
Imports BLV_Studio.FrmCSeriesConfig
|
||
|
||
Public Class PollingHostThread
|
||
|
||
|
||
Private g_Grid As FlexCell.Grid
|
||
Private g_PollingThread As Thread
|
||
Private g_PollingState As Integer
|
||
Private IsThreadRunning As Boolean
|
||
Private DicOnlineIP As Dictionary(Of String, Date)
|
||
Private g_fcsconfig As FrmCSeriesConfig
|
||
Private g_listobj As List(Of Object)
|
||
Sub New(fcsconfig As FrmCSeriesConfig, Grid As FlexCell.Grid)
|
||
g_listobj = New List(Of Object)
|
||
g_PollingState = 9
|
||
g_Grid = Grid
|
||
g_fcsconfig = fcsconfig
|
||
DicOnlineIP = New Dictionary(Of String, Date)
|
||
IsThreadRunning = True
|
||
g_PollingThread = New Thread(AddressOf StartPolling)
|
||
g_PollingThread.Start()
|
||
End Sub
|
||
Private Sub StartPolling()
|
||
While (IsThreadRunning)
|
||
Select Case g_PollingState
|
||
Case 0
|
||
Try
|
||
g_PollingState0()
|
||
Catch ex As Exception
|
||
g_PollingState = 9
|
||
End Try
|
||
|
||
'g_PollingState = 1
|
||
Case 1
|
||
System.Threading.Thread.Sleep(2000)
|
||
'g_PollingState = 1
|
||
Case 2
|
||
System.Threading.Thread.Sleep(3000)
|
||
g_PollingState2()
|
||
g_PollingState = 3
|
||
Case 3
|
||
g_PollingState = 4
|
||
Case 4
|
||
g_PollingState = 5
|
||
Case 5
|
||
g_PollingState = 6
|
||
Case 6
|
||
g_PollingState = 7
|
||
Case 7
|
||
g_PollingState = 8
|
||
Case 8
|
||
g_PollingState = 9
|
||
|
||
Case 9
|
||
'Console.WriteLine("StartPolling")
|
||
System.Threading.Thread.Sleep(1000)
|
||
' g_PollingState = 0
|
||
End Select
|
||
End While
|
||
End Sub
|
||
|
||
Private Sub g_PollingState0()
|
||
DicOnlineIP.Clear()
|
||
|
||
|
||
|
||
If IsNothing(g_Grid) OrElse g_Grid.Rows = 0 Then Return
|
||
|
||
For i = 1 To g_Grid.Rows - 1
|
||
If g_PollingState <> 0 Then Return
|
||
Dim ipAddr As String = g_Grid.Cell(i, EnRCUHosts.IPAddress).Text
|
||
'Dim port As String = g_Grid.Cell(i, EnRCUHosts.Port).Text
|
||
_RemoteIP = IPAddress.Parse(g_Grid.Cell(i, EnRCUHosts.IPAddress).Text)
|
||
_RemotePort = g_Grid.Cell(i, EnRCUHosts.Port).Text
|
||
TimeSynchronization()
|
||
DicOnlineIP.Add(ipAddr, Now)
|
||
Setg_GridTextStyleMethod(i, "检测是否在线中", Color.Blue)
|
||
System.Threading.Thread.Sleep(1000)
|
||
If DicOnlineIP.ContainsKey(ipAddr) Then
|
||
Setg_GridTextStyleMethod(i, "离线", Color.Red)
|
||
End If
|
||
|
||
Next
|
||
|
||
|
||
End Sub
|
||
|
||
|
||
Private Sub g_PollingState2()
|
||
DicOnlineIP.Clear()
|
||
|
||
If IsNothing(g_Grid) OrElse g_Grid.Rows = 0 Then Return
|
||
Dim li = GetLocalIp()
|
||
|
||
If li.Count > 1 Then Return
|
||
g_fcsconfig._searchHosts = True
|
||
'Dim oldtime = Now
|
||
Dim loadaddr = li(0).ToString.Split(".")
|
||
Dim ipAddr As String = $"{loadaddr(0)}.{loadaddr(1)}." '$"{loadaddr(0)}.{loadaddr(1)}.{loadaddr(2)}."
|
||
For r = CInt(g_listobj(0)) To CInt(g_listobj(1))
|
||
Dim lipAddr = $"{ipAddr}{r.ToString}."
|
||
For i = CInt(g_listobj(2)) To CInt(g_listobj(3))
|
||
If g_PollingState <> 2 Then Return
|
||
Dim ipAddrv As String = $"{lipAddr}{i.ToString}"
|
||
'Dim port As String = g_Grid.Cell(i, EnRCUHosts.Port).Text
|
||
_RemoteIP = IPAddress.Parse(ipAddrv)
|
||
_RemotePort = 3341 ' GetRandomPort()
|
||
TimeSynchronization()
|
||
' DicOnlineIP.Add(ipAddr, Now)
|
||
'Setg_GridTextStyleMethod(i, "检测是否在线中", Color.Blue)
|
||
System.Threading.Thread.Sleep(20)
|
||
'If DicOnlineIP.ContainsKey(ipAddr) Then
|
||
' Setg_GridTextStyleMethod(i, "离线", Color.Red)
|
||
'End If
|
||
|
||
Next
|
||
|
||
Next
|
||
'Dim ktimg = Now - oldtime
|
||
'Console.WriteLine($"耗时{ktimg.TotalMilliseconds}毫秒")
|
||
ToolStripButton6PerformClickMethod()
|
||
End Sub
|
||
|
||
Delegate Sub ToolStripButton6PerformClick()
|
||
Public Sub ToolStripButton6PerformClickMethod()
|
||
If g_fcsconfig.InvokeRequired = True Then
|
||
|
||
g_fcsconfig.Invoke(New ToolStripButton6PerformClick(AddressOf ToolStripButton6PerformClickMethod))
|
||
Else
|
||
g_fcsconfig.ToolStripButton6_Click(Nothing, Nothing)
|
||
End If
|
||
|
||
End Sub
|
||
|
||
Private Sub TimeSynchronization()
|
||
|
||
|
||
Dim cmd As Byte = &HB1
|
||
Dim data As Byte() = g_fcsconfig.FillReadCmdData()
|
||
Dim sendData As Byte() = g_fcsconfig.FillSendData(cmd, data)
|
||
Try
|
||
g_fcsconfig.SendUDPData1(sendData)
|
||
Catch ex As Exception
|
||
Return
|
||
End Try
|
||
|
||
End Sub
|
||
|
||
Public Sub SetRemoteIP(ip As String)
|
||
If IsNothing(DicOnlineIP) OrElse DicOnlineIP.Count = 0 OrElse IsNothing(g_Grid) OrElse g_Grid.Rows = 0 Then Return
|
||
If DicOnlineIP.ContainsKey(ip.ToString) Then
|
||
DicOnlineIP.Remove(ip.ToString)
|
||
For i = 1 To g_Grid.Rows - 1
|
||
If g_Grid.Cell(i, EnRCUHosts.IPAddress).Text = ip.ToString Then
|
||
Setg_GridTextStyleMethod(i, "在线", Color.Green)
|
||
Return
|
||
End If
|
||
Next
|
||
End If
|
||
End Sub
|
||
Delegate Sub Setg_GridTextStyle(row As Integer, txt As String, txtcolor As Color)
|
||
Public Sub Setg_GridTextStyleMethod(row As Integer, txt As String, txtcolor As Color)
|
||
Try
|
||
If g_Grid.InvokeRequired = True Then
|
||
Dim dev As New Setg_GridTextStyle(AddressOf Setg_GridTextStyleMethod)
|
||
g_Grid.Invoke(dev, row, txt, txtcolor)
|
||
Else
|
||
g_Grid.Cell(row, EnRCUHosts.Update).Text = txt
|
||
g_Grid.Cell(row, EnRCUHosts.Update).ForeColor = txtcolor
|
||
End If
|
||
Catch ex As Exception
|
||
Return
|
||
End Try
|
||
|
||
End Sub
|
||
|
||
Public Sub StopPolling()
|
||
IsThreadRunning = False
|
||
End Sub
|
||
Public Sub PollingThreadClosed()
|
||
If IsNothing(g_PollingThread) Then Return
|
||
g_PollingThread.Abort()
|
||
End Sub
|
||
|
||
Public Sub SetPollingState(state As Integer)
|
||
g_PollingState = state
|
||
End Sub
|
||
Public Sub Setg_listobjPar(ParamArray listobj() As Object)
|
||
g_listobj.Clear()
|
||
g_listobj.AddRange(listobj)
|
||
End Sub
|
||
|
||
End Class
|