Skip to content

Commit c7479bf

Browse files
committed
Updates to preference saving, and more
- Cleaned up code in several files - Organized Properties in UPS_Device - PollingInterval is now a property, directly linked to the Timer. - WinNUT_Params: Delay defaults to valid value of 1 - Clarified variable names in Pref_Gui - Raise an even when preferences are saved, and indicate if any were modified - WinNUT.vb: Connect PrefsChanged subroutine to respective event in Prefs_Gui - Simplified connection subroutine - Split off disconnection subroutines for beginning a disconnection, and handling post-disconnect event. Modified the rest of the file to use these subroutines to prevent future null ref exceptions. - Simplified PrefsChanged subroutine for handling changed preferences.
1 parent d635ac9 commit c7479bf

File tree

4 files changed

+132
-188
lines changed

4 files changed

+132
-188
lines changed

WinNUT_V2/WinNUT-Client_Common/UPS_Device.vb

Lines changed: 60 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,30 @@ 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
@@ -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/Pref_Gui.vb

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ Imports WinNUT_Client_Common
1414

1515
Public Class Pref_Gui
1616
Private IsShowed As Boolean = False
17-
Private IsSaved As Boolean = False
17+
Private PrefsModified As Boolean = False
18+
19+
' Indicate that parameters have been saved (and if one or more were changed)
20+
Public Event SavedPreferences(isModified As Boolean)
1821

1922
Private Sub Btn_Cancel_Click(sender As Object, e As EventArgs) Handles Btn_Cancel.Click
2023
LogFile.LogTracing("Close Pref Gui from Button Cancel", LogLvl.LOG_DEBUG, Me)
@@ -23,7 +26,7 @@ Public Class Pref_Gui
2326

2427
Private Sub Save_Params()
2528
Try
26-
IsSaved = False
29+
' PrefsModified = False
2730
LogFile.LogTracing("Save Parameters.", LogLvl.LOG_DEBUG, Me)
2831
Arr_Reg_Key.Item("ServerAddress") = Tb_Server_IP.Text
2932
Arr_Reg_Key.Item("Port") = CInt(Tb_Port.Text)
@@ -61,6 +64,7 @@ Public Class Pref_Gui
6164
Arr_Reg_Key.Item("VerifyUpdateAtStart") = Cb_Update_At_Start.Checked
6265
Arr_Reg_Key.Item("DelayBetweenEachVerification") = Cbx_Delay_Verif.SelectedIndex
6366
Arr_Reg_Key.Item("StableOrDevBranch") = Cbx_Branch_Update.SelectedIndex
67+
6468
WinNUT_Params.Save_Params()
6569
If CB_Start_W_Win.Checked Then
6670
If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\", Application.ProductName, Nothing) Is Nothing Then
@@ -80,22 +84,24 @@ Public Class Pref_Gui
8084
LogFile.LogTracing("Pref_Gui Params Saved", 1, Me)
8185

8286
SetLogControlsStatus()
83-
WinNUT.WinNUT_PrefsChanged()
84-
IsSaved = True
87+
' WinNUT.WinNUT_PrefsChanged()
88+
RaiseEvent SavedPreferences(PrefsModified)
89+
90+
' PrefsModified = True
8591
Catch e As Exception
86-
IsSaved = False
92+
' PrefsModified = False
8793
End Try
8894
End Sub
8995

9096
Private Sub Btn_Apply_Click(sender As Object, e As EventArgs) Handles Btn_Apply.Click
9197
Save_Params()
92-
If IsSaved Then
98+
If PrefsModified Then
9399
Btn_Apply.Enabled = False
94100
End If
95101
End Sub
96102

97103
Private Sub Btn_Ok_Click(sender As Object, e As EventArgs) Handles Btn_Ok.Click
98-
If Not IsSaved Then
104+
If PrefsModified Then
99105
Save_Params()
100106
End If
101107
Close()
@@ -351,9 +357,14 @@ Public Class Pref_Gui
351357
LogFile.LogTracing("Load Pref Gui", LogLvl.LOG_DEBUG, Me)
352358
End Sub
353359

360+
''' <summary>
361+
''' Handle any value in the form changing.
362+
''' </summary>
363+
''' <param name="sender"></param>
364+
''' <param name="e"></param>
354365
Private Sub Event_Ctrl_Value_Changed(sender As Object, e As EventArgs)
355366
If IsShowed Then
356-
IsSaved = False
367+
PrefsModified = True
357368
Btn_Apply.Enabled = True
358369
End If
359370
End Sub

0 commit comments

Comments
 (0)