Skip to content

Commit 2449adb

Browse files
authored
Merge pull request #20 from nutdotnet/disconnect
Better disconnection handling in main form, fix two NREs
2 parents c2a01b4 + e053da4 commit 2449adb

File tree

6 files changed

+184
-243
lines changed

6 files changed

+184
-243
lines changed

WinNUT_V2/WinNUT-Client_Common/UPS_Device.vb

Lines changed: 61 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,34 @@ Imports System.Globalization
1111
Imports System.Windows.Forms
1212

1313
Public Class UPS_Device
14+
#Region "Properties"
15+
16+
Public ReadOnly Property IsConnected() As Boolean
17+
Get
18+
Return (Nut_Socket.IsConnected) ' And Me.Socket_Status
19+
End Get
20+
End Property
21+
22+
Public ReadOnly Property IsAuthenticated() As Boolean
23+
Get
24+
Return Nut_Socket.Auth_Success
25+
End Get
26+
End Property
27+
28+
Public Property PollingInterval As Integer
29+
Get
30+
Return Update_Data.Interval
31+
End Get
32+
Set(value As Integer)
33+
Update_Data.Interval = value
34+
End Set
35+
End Property
36+
37+
#End Region
1438
Private Const CosPhi As Double = 0.6
1539
' How many milliseconds to wait before the Reconnect routine tries again.
1640
#If DEBUG Then
17-
Private Const DEFAULT_RECONNECT_WAIT_MS As Double = 3000
41+
Private Const DEFAULT_RECONNECT_WAIT_MS As Double = 5000
1842
#Else
1943
Private Const DEFAULT_RECONNECT_WAIT_MS As Double = 30000
2044
#End If
@@ -96,29 +120,18 @@ Public Class UPS_Device
96120
Public Event Shutdown_Condition()
97121
Public Event Stop_Shutdown()
98122

99-
Private Polling_Interval As Integer
100123
Private WithEvents Update_Data As New Timer
101124

102-
Public ReadOnly Property IsConnected() As Boolean
103-
Get
104-
Return (Me.Nut_Socket.IsConnected) ' And Me.Socket_Status
105-
End Get
106-
End Property
107125

108-
Public ReadOnly Property IsAuthenticated() As Boolean
109-
Get
110-
Return Me.Nut_Socket.Auth_Success
111-
End Get
112-
End Property
113126

114127
Public Sub New(ByRef Nut_Config As Nut_Parameter, ByRef LogFile As Logger, pollInterval As Integer)
115128
Me.LogFile = LogFile
116129
Me.Nut_Config = Nut_Config
117-
' Polling_Interval = pollInterval
118-
Update_Data.Interval = pollInterval
130+
PollingInterval = pollInterval
119131
ciClone = CType(CultureInfo.InvariantCulture.Clone(), CultureInfo)
120132
ciClone.NumberFormat.NumberDecimalSeparator = "."
121133
Nut_Socket = New Nut_Socket(Me.Nut_Config, LogFile)
134+
122135
With Reconnect_Nut
123136
.Interval = DEFAULT_RECONNECT_WAIT_MS
124137
.Enabled = False
@@ -135,24 +148,19 @@ Public Class UPS_Device
135148
' Dim UPSName = Me.Nut_Config.UPSName
136149
LogFile.LogTracing("Beginning connection: " & Nut_Config.ToString(), LogLvl.LOG_DEBUG, Me)
137150

138-
If Me.Nut_Socket.Connect() And Me.Nut_Socket.IsConnected Then
151+
If Nut_Socket.Connect() And Nut_Socket.IsConnected Then
139152
LogFile.LogTracing("TCP Socket Created", LogLvl.LOG_NOTICE, Me)
140-
' Me.Socket_Status = True
153+
141154
If Nut_Socket.IsKnownUPS(Nut_Config.UPSName) Then
142-
Me.UPS_Datas = GetUPSProductInfo()
155+
UPS_Datas = GetUPSProductInfo()
143156
Init_Constant(Nut_Socket)
144157
Update_Data.Start()
145158
RaiseEvent Connected(Me)
146159
Else
147-
LogFile.LogTracing("Given UPS Name is unknown", LogLvl.LOG_NOTICE, Me)
160+
LogFile.LogTracing("Given UPS Name is unknown", LogLvl.LOG_ERROR, Me)
148161
RaiseEvent Unknown_UPS()
162+
Disconnect(True, False, True)
149163
End If
150-
' WatchDog.Start()
151-
'Else
152-
' If Not Reconnect_Nut.Enabled Then
153-
' RaiseEvent Lost_Connect()
154-
' Me.Socket_Status = False
155-
' End If
156164
End If
157165
End Sub
158166

@@ -188,17 +196,8 @@ Public Class UPS_Device
188196
#Region "Socket Interaction"
189197

190198
Private Sub SocketDisconnected() Handles Nut_Socket.SocketDisconnected
191-
' WatchDog.Stop()
192199
LogFile.LogTracing("NutSocket raised Disconnected event.", LogLvl.LOG_DEBUG, Me)
193-
'If Not Me.Socket_Status Then
194-
' RaiseEvent Lost_Connect()
195-
'End If
196-
' Me.Socket_Status = False
197-
'If Me.Nut_Config.AutoReconnect Then
198-
' LogFile.LogTracing("Reconnection Process Started", LogLvl.LOG_NOTICE, Me)
199-
' Reconnect_Nut.Enabled = True
200-
' Reconnect_Nut.Start()
201-
'End If
200+
202201
RaiseEvent Disconnected()
203202
End Sub
204203

@@ -210,7 +209,7 @@ Public Class UPS_Device
210209
''' <param name="sender"></param>
211210
''' <param name="e"></param>
212211
Private Sub Event_WatchDog(sender As Object, e As EventArgs)
213-
If Me.IsConnected Then
212+
If IsConnected Then
214213
Dim Nut_Query = Nut_Socket.Query_Data("")
215214
If Nut_Query.Response = NUTResponse.NORESPONSE Then
216215
LogFile.LogTracing("WatchDog Socket report a Broken State", LogLvl.LOG_WARNING, Me)
@@ -234,15 +233,15 @@ Public Class UPS_Device
234233
End Sub
235234

236235
Private Sub Reconnect_Socket(sender As Object, e As EventArgs) Handles Reconnect_Nut.Tick
237-
Me.Retry += 1
238-
If Me.Retry <= Me.MaxRetry Then
236+
Retry += 1
237+
If Retry <= MaxRetry Then
239238
RaiseEvent New_Retry()
240-
LogFile.LogTracing(String.Format("Try Reconnect {0} / {1}", Me.Retry, Me.MaxRetry), LogLvl.LOG_NOTICE, Me, String.Format(WinNUT_Globals.StrLog.Item(AppResxStr.STR_LOG_NEW_RETRY), Me.Retry, Me.MaxRetry))
241-
Me.Connect_UPS()
242-
If Me.IsConnected Then
239+
LogFile.LogTracing(String.Format("Try Reconnect {0} / {1}", Retry, MaxRetry), LogLvl.LOG_NOTICE, Me, String.Format(WinNUT_Globals.StrLog.Item(AppResxStr.STR_LOG_NEW_RETRY), Retry, MaxRetry))
240+
Connect_UPS()
241+
If IsConnected Then
243242
LogFile.LogTracing("Nut Host Reconnected", LogLvl.LOG_DEBUG, Me)
244243
Reconnect_Nut.Stop()
245-
Me.Retry = 0
244+
Retry = 0
246245
RaiseEvent ReConnected(Me)
247246
End If
248247
Else
@@ -271,44 +270,44 @@ Public Class UPS_Device
271270

272271
Private Function GetUPSProductInfo() As UPS_Datas
273272
Dim UDatas As New UPS_Datas
274-
Dim UPSName = Me.Nut_Config.UPSName
275-
UDatas.Mfr = Trim(Me.GetUPSVar("ups.mfr", UPSName, "Unknown"))
276-
UDatas.Model = Trim(Me.GetUPSVar("ups.model", UPSName, "Unknown"))
277-
UDatas.Serial = Trim(Me.GetUPSVar("ups.serial", UPSName, "Unknown"))
278-
UDatas.Firmware = Trim(Me.GetUPSVar("ups.firmware", UPSName, "Unknown"))
273+
Dim UPSName = Nut_Config.UPSName
274+
UDatas.Mfr = Trim(GetUPSVar("ups.mfr", UPSName, "Unknown"))
275+
UDatas.Model = Trim(GetUPSVar("ups.model", UPSName, "Unknown"))
276+
UDatas.Serial = Trim(GetUPSVar("ups.serial", UPSName, "Unknown"))
277+
UDatas.Firmware = Trim(GetUPSVar("ups.firmware", UPSName, "Unknown"))
279278
Return UDatas
280279
End Function
281280

282281
Private Sub Init_Constant(ByRef Nut_Socket As Nut_Socket)
283-
Dim UPSName = Me.Nut_Config.UPSName
284-
Me.UPS_Datas.UPS_Value.Batt_Capacity = Double.Parse(Me.GetUPSVar("battery.capacity", UPSName, 7), ciClone)
285-
Me.Freq_Fallback = Double.Parse(Me.GetUPSVar("output.frequency.nominal", UPSName, (50 + CInt(WinNUT_Params.Arr_Reg_Key.Item("FrequencySupply")) * 10)), Me.ciClone)
282+
Dim UPSName = Nut_Config.UPSName
283+
UPS_Datas.UPS_Value.Batt_Capacity = Double.Parse(GetUPSVar("battery.capacity", UPSName, 7), ciClone)
284+
Freq_Fallback = Double.Parse(GetUPSVar("output.frequency.nominal", UPSName, (50 + CInt(WinNUT_Params.Arr_Reg_Key.Item("FrequencySupply")) * 10)), ciClone)
286285
End Sub
287286

288287
Public Sub Retrieve_UPS_Datas() Handles Update_Data.Tick ' As UPS_Datas
289-
Dim UPSName = Me.Nut_Config.UPSName
288+
Dim UPSName = Nut_Config.UPSName
290289
LogFile.LogTracing("Enter Retrieve_UPS_Datas", LogLvl.LOG_DEBUG, Me)
291290
Try
292291
Dim UPS_rt_Status As String
293292
Dim InputA As Double
294293
' LogFile.LogTracing("Enter Retrieve_UPS_Data", LogLvl.LOG_DEBUG, Me)
295-
If Me.IsConnected Then
296-
With Me.UPS_Datas
294+
If IsConnected Then
295+
With UPS_Datas
297296
Select Case "Unknown"
298297
Case .Mfr, .Model, .Serial, .Firmware
299-
Me.UPS_Datas = GetUPSProductInfo()
298+
UPS_Datas = GetUPSProductInfo()
300299
End Select
301300
End With
302-
With Me.UPS_Datas.UPS_Value
301+
With UPS_Datas.UPS_Value
303302
.Batt_Charge = Double.Parse(GetUPSVar("battery.charge", UPSName, 255), ciClone)
304303
.Batt_Voltage = Double.Parse(GetUPSVar("battery.voltage", UPSName, 12), ciClone)
305304
.Batt_Runtime = Double.Parse(GetUPSVar("battery.runtime", UPSName, 86400), ciClone)
306-
.Power_Frequency = Double.Parse(GetUPSVar("input.frequency", UPSName, Double.Parse(Me.GetUPSVar("output.frequency", UPSName, Freq_Fallback), ciClone)), ciClone)
305+
.Power_Frequency = Double.Parse(GetUPSVar("input.frequency", UPSName, Double.Parse(GetUPSVar("output.frequency", UPSName, Freq_Fallback), ciClone)), ciClone)
307306
.Input_Voltage = Double.Parse(GetUPSVar("input.voltage", UPSName, 220), ciClone)
308307
.Output_Voltage = Double.Parse(GetUPSVar("output.voltage", UPSName, .Input_Voltage), ciClone)
309308
.Load = Double.Parse(GetUPSVar("ups.load", UPSName, 100), ciClone)
310-
UPS_rt_Status = Me.GetUPSVar("ups.status", UPSName, "OL")
311-
.Output_Power = Double.Parse((Me.GetUPSVar("ups.realpower.nominal", UPSName, 0)), ciClone)
309+
UPS_rt_Status = GetUPSVar("ups.status", UPSName, "OL")
310+
.Output_Power = Double.Parse((GetUPSVar("ups.realpower.nominal", UPSName, 0)), ciClone)
312311
If .Output_Power = 0 Then
313312
.Output_Power = Double.Parse((GetUPSVar("ups.power.nominal", UPSName, 0)), ciClone)
314313
If .Output_Power = 0 Then
@@ -421,11 +420,11 @@ Public Class UPS_Device
421420
' Try
422421
' LogFile.LogTracing("Enter GetUPSVar", LogLvl.LOG_DEBUG, Me)
423422
'If Not Me.ConnectionStatus Then
424-
If Not Me.IsConnected Then
423+
If Not IsConnected Then
425424
Throw New Nut_Exception(Nut_Exception_Value.SOCKET_BROKEN, varName)
426425
Return Nothing
427426
Else
428-
Dim Nut_Query = Me.Nut_Socket.Query_Data("GET VAR " & UPSName & " " & varName)
427+
Dim Nut_Query = Nut_Socket.Query_Data("GET VAR " & UPSName & " " & varName)
429428

430429
Select Case Nut_Query.Response
431430
Case NUTResponse.OK
@@ -464,15 +463,15 @@ Public Class UPS_Device
464463

465464
Public Function GetUPS_ListVar() As List(Of UPS_List_Datas)
466465
Dim Response = New List(Of UPS_List_Datas)
467-
Dim Query = "LIST VAR " & Me.Nut_Config.UPSName
466+
Dim Query = "LIST VAR " & Nut_Config.UPSName
468467
Try
469468
LogFile.LogTracing("Enter GetUPS_ListVar", LogLvl.LOG_DEBUG, Me)
470469
'If Not Me.ConnectionStatus Then
471-
If Not Me.IsConnected Then
470+
If Not IsConnected Then
472471
Throw New Nut_Exception(Nut_Exception_Value.SOCKET_BROKEN, Query)
473472
Return Nothing
474473
Else
475-
Dim List_Var = Me.Nut_Socket.Query_List_Datas(Query)
474+
Dim List_Var = Nut_Socket.Query_List_Datas(Query)
476475
If Not IsNothing(List_Var) Then
477476
Response = List_Var
478477
End If

WinNUT_V2/WinNUT-Client_Common/WinNUT_Params.vb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Public Module WinNUT_Params
1919
.Add("ServerAddress", "")
2020
.Add("Port", 0)
2121
.Add("UPSName", "")
22-
.Add("Delay", 0)
22+
.Add("Delay", 1)
2323
.Add("NutLogin", Cryptor.EncryptData(""))
2424
.Add("NutPassword", Cryptor.EncryptData(""))
2525
.Add("AutoReconnect", vbFalse)
@@ -161,6 +161,7 @@ Public Module WinNUT_Params
161161
Public Function Save_Params() As Boolean
162162
Dim Cryptor As New CryptData()
163163
Dim Result As Boolean = False
164+
164165
Try
165166
For Each RegKeys As KeyValuePair(Of String, Dictionary(Of String, Object)) In Arr_Reg_Key_Base
166167
For Each RegValue As KeyValuePair(Of String, Object) In RegKeys.Value

WinNUT_V2/WinNUT_GUI/About_Gui.vb

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,24 @@
77
'
88
' This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY
99

10-
Imports WinNUT_Params = WinNUT_Client_Common.WinNUT_Params
11-
Imports Logger = WinNUT_Client_Common.Logger
12-
Imports LogLvl = WinNUT_Client_Common.LogLvl
13-
Imports WinNUT_Globals = WinNUT_Client_Common.WinNUT_Globals
10+
Imports WinNUT_Client_Common
1411

1512
Public Class About_Gui
16-
Private LogFile As Logger
1713
Private Sub About_Gui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
18-
Lbl_ProgNameVersion.Text = WinNUT_Globals.LongProgramName & vbNewLine & "Version " & WinNUT_Globals.ProgramVersion
19-
Lbl_Copyright_2019.Text = Strings.Replace(WinNUT_Globals.Copyright, "©", vbNewLine & "©")
20-
LkLbl_Github.Text = WinNUT_Globals.GitHubURL
21-
Me.Icon = WinNUT.Icon
14+
Lbl_ProgNameVersion.Text = LongProgramName & vbNewLine & "Version " & ProgramVersion
15+
Lbl_Copyright_2019.Text = Replace(Copyright, "©", vbNewLine & "©")
16+
LkLbl_Github.Text = GitHubURL
17+
Icon = WinNUT.Icon
2218
' Me.LogFile = WinNUT.LogFile
2319
LogFile.LogTracing("Load About Gui", LogLvl.LOG_DEBUG, Me)
2420
End Sub
2521

2622
Private Sub Btn_OK_Click(sender As Object, e As EventArgs) Handles Btn_OK.Click
2723
LogFile.LogTracing("Close About Gui", LogLvl.LOG_DEBUG, Me)
28-
Me.Close()
24+
Close()
2925
End Sub
3026

3127
Private Sub LkLbl_Github_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LkLbl_Github.LinkClicked
32-
System.Diagnostics.Process.Start(sender.Text)
28+
Process.Start(sender.Text)
3329
End Sub
3430
End Class

WinNUT_V2/WinNUT_GUI/List_Var_Gui.vb

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ Imports WinNUT_Client_Common
1111

1212
Public Class List_Var_Gui
1313
Private List_Var_Datas As List(Of UPS_List_Datas)
14-
Private LogFile As Logger
1514
Private UPS_Name = WinNUT.UPS_Device.Nut_Config.UPSName
15+
1616
Private Sub List_Var_Gui_Load(sender As Object, e As EventArgs) Handles MyBase.Load
17-
' Me.LogFile = WinNUT.LogFile
1817
LogFile.LogTracing("Load List Var Gui", LogLvl.LOG_DEBUG, Me)
19-
Me.Icon = WinNUT.Icon
20-
Me.Visible = False
18+
Icon = WinNUT.Icon
19+
Visible = False
2120
PopulateTreeView()
22-
Me.Visible = True
21+
Visible = True
2322
End Sub
2423

2524
Private Sub PopulateTreeView()
@@ -34,14 +33,14 @@ Public Class List_Var_Gui
3433

3534
action = Sub() TView_UPSVar.Nodes.Clear()
3635
TView_UPSVar.Invoke(action)
37-
action = Sub() TView_UPSVar.Nodes.Add(WinNUT_Params.Arr_Reg_Key.Item("UPSName"), WinNUT_Params.Arr_Reg_Key.Item("UPSName"))
36+
action = Sub() TView_UPSVar.Nodes.Add(Arr_Reg_Key.Item("UPSName"), Arr_Reg_Key.Item("UPSName"))
3837
TView_UPSVar.Invoke(action)
3938
Dim TreeChild As New TreeNode
4039
Dim LastNode As New TreeNode
4140
For Each UPS_Var In List_Var_Datas
4241
LastNode = TView_UPSVar.Nodes(0)
4342
Dim FullPathNode = String.Empty
44-
For Each SubPath In (Strings.Split(UPS_Var.VarKey, "."))
43+
For Each SubPath In (Split(UPS_Var.VarKey, "."))
4544
FullPathNode += SubPath & "."
4645
Dim Nodes = TView_UPSVar.Nodes.Find(FullPathNode, True)
4746
If Nodes.Length = 0 Then
@@ -83,18 +82,18 @@ Public Class List_Var_Gui
8382
Dim SelectedNode As TreeNode = TView_UPSVar.SelectedNode
8483
If SelectedNode IsNot Nothing Then
8584
If SelectedNode.Parent IsNot Nothing Then
86-
If SelectedNode.Parent.Text <> Me.UPS_Name And SelectedNode.Nodes.Count = 0 Then
87-
Dim VarName = Strings.Replace(TView_UPSVar.SelectedNode.FullPath, Me.UPS_Name & ".", "")
85+
If SelectedNode.Parent.Text <> UPS_Name And SelectedNode.Nodes.Count = 0 Then
86+
Dim VarName = Replace(TView_UPSVar.SelectedNode.FullPath, UPS_Name & ".", "")
8887
LogFile.LogTracing("Update {VarName}", LogLvl.LOG_DEBUG, Me)
89-
Lbl_V_Value.Text = WinNUT.UPS_Device.GetUPSVar(VarName, Me.UPS_Name)
88+
Lbl_V_Value.Text = WinNUT.UPS_Device.GetUPSVar(VarName, UPS_Name)
9089
End If
9190
End If
9291
End If
9392
End Sub
9493

9594
Private Sub Btn_Close_Click(sender As Object, e As EventArgs) Handles Btn_Close.Click
9695
LogFile.LogTracing("Close List Var Gui", LogLvl.LOG_DEBUG, Me)
97-
Me.Close()
96+
Close()
9897
End Sub
9998

10099
Private Sub Btn_Reload_Click(sender As Object, e As EventArgs) Handles Btn_Reload.Click
@@ -103,13 +102,13 @@ Public Class List_Var_Gui
103102
Lbl_V_Value.Text = ""
104103
Lbl_D_Value.Text = ""
105104
TView_UPSVar.Nodes.Clear()
106-
Me.PopulateTreeView()
105+
PopulateTreeView()
107106
End Sub
108107

109108
Private Sub TView_UPSVar_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TView_UPSVar.NodeMouseClick
110109
Dim index As Integer = 0
111-
Dim UPSName = WinNUT_Params.Arr_Reg_Key.Item("UPSName")
112-
Dim SelectedChild = Strings.Replace(e.Node.FullPath, UPSName & ".", "")
110+
Dim UPSName = Arr_Reg_Key.Item("UPSName")
111+
Dim SelectedChild = Replace(e.Node.FullPath, UPSName & ".", "")
113112
Dim FindChild As Predicate(Of UPS_List_Datas) = Function(ByVal x As UPS_List_Datas)
114113
If x.VarKey = SelectedChild Then
115114
Return True
@@ -134,7 +133,7 @@ Public Class List_Var_Gui
134133
LogFile.LogTracing("Export TreeView To Clipboard", LogLvl.LOG_DEBUG, Me)
135134
Dim ToClipBoard As String = Nothing
136135
With WinNUT.UPS_Device.UPS_Datas
137-
ToClipBoard = WinNUT_Params.Arr_Reg_Key.Item("UPSName") & " (" & .Mfr & "/" & .Model & "/" & .Firmware & ")" & vbNewLine
136+
ToClipBoard = Arr_Reg_Key.Item("UPSName") & " (" & .Mfr & "/" & .Model & "/" & .Firmware & ")" & vbNewLine
138137
End With
139138
For Each LDatas In List_Var_Datas
140139
ToClipBoard &= LDatas.VarKey & " (" & LDatas.VarDesc & ") : " & LDatas.VarValue & vbNewLine

0 commit comments

Comments
 (0)