Skip to content

Commit ef3db83

Browse files
committed
More logging, and some optimization
1 parent c6faf87 commit ef3db83

4 files changed

Lines changed: 74 additions & 25 deletions

File tree

RDMSharp/RDM/AsyncRDMRequestHelper.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ public async Task<RequestResult> RequestMessage(RDMMessage request, bool setTran
177177
Logger?.LogTrace($"Successful Request: {request?.ToString()} Response: {response?.ToString()} ElapsedTime: {bag2?.ElapsedTime}");
178178
return result;
179179
}
180+
catch (TimeoutException)
181+
{
182+
Logger?.LogInformation($"Timeout Exception Request: {request}");
183+
return new RequestResult(request, timeout: true);
184+
}
180185
catch (Exception ex)
181186
{
182187
Logger?.LogError(ex);

RDMSharp/RDM/GlobalTimers.cs

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
using System;
1+
using Microsoft.Extensions.Logging;
2+
using System;
23

34
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("RDMSharp.Tests")]
45
namespace RDMSharp;
56

67
public class GlobalTimers
78
{
9+
private static readonly ILogger Logger = Logging.CreateLogger<GlobalTimers>();
810
private static GlobalTimers instance = null;
911
public static GlobalTimers Instance
1012
{
@@ -107,6 +109,7 @@ public event EventHandler PresentUpdateTimerElapsed
107109
}
108110
private void initializeParameterUpdateTimer()
109111
{
112+
Logger?.LogInformation("InitializeParameterUpdateTimer");
110113
if (parameterUpdateTimer != null)
111114
return;
112115
parameterUpdateTimer = new System.Timers.Timer(ParameterUpdateTimerInterval);
@@ -115,6 +118,7 @@ private void initializeParameterUpdateTimer()
115118
}
116119
private void destroyParameterUpdateTimer()
117120
{
121+
Logger?.LogCritical("DestroyParameterUpdateTimer");
118122
if (parameterUpdateTimer == null)
119123
return;
120124
parameterUpdateTimer.Enabled = false;
@@ -125,6 +129,7 @@ private void destroyParameterUpdateTimer()
125129

126130
private void initializePresentUpdateTimer()
127131
{
132+
Logger?.LogInformation("InitializePresentUpdateTimer");
128133
if (parameterUpdateTimer != null)
129134
return;
130135
presentUpdateTimer = new System.Timers.Timer(PresentUpdateTimerInterval);
@@ -133,6 +138,7 @@ private void initializePresentUpdateTimer()
133138
}
134139
private void destroyPresentUpdateTimer()
135140
{
141+
Logger?.LogCritical("DestroyPresentUpdateTimer");
136142
if (parameterUpdateTimer == null)
137143
return;
138144
presentUpdateTimer.Enabled = false;
@@ -142,6 +148,7 @@ private void destroyPresentUpdateTimer()
142148
}
143149
public void ResetAllTimersToDefault()
144150
{
151+
Logger?.LogCritical("ResetAllTimersToDefault");
145152
QueuedUpdateTime = DefaultQueuedUpdateTime;
146153
NonQueuedUpdateTime = DefaultNonQueuedUpdateTime;
147154
UpdateDelayBetweenRequests = DefaultUpdateDelayBetweenRequests;
@@ -172,37 +179,52 @@ internal void InternalAllTimersToTestSpeed()
172179

173180
private void ParameterUpdateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
174181
{
175-
// Parallelisierung: Alle Handler parallel ausführen, falls mehrere abonniert sind
176-
var handlers = parameterUpdateTimerElapsed?.GetInvocationList();
177-
if (handlers != null)
182+
try
178183
{
179-
System.Threading.Tasks.Parallel.ForEach(handlers, handler =>
184+
var handlers = parameterUpdateTimerElapsed?.GetInvocationList();
185+
if (handlers != null)
180186
{
181-
try
187+
System.Threading.Tasks.Parallel.ForEach(handlers, handler =>
182188
{
183-
((EventHandler)handler)?.Invoke(sender, EventArgs.Empty);
184-
}
185-
catch
186-
{
187-
}
188-
});
189+
try
190+
{
191+
((EventHandler)handler)?.Invoke(sender, EventArgs.Empty);
192+
}
193+
catch (Exception ex)
194+
{
195+
Logger?.LogError(ex, "Error in ParameterUpdateTimerElapsed handler");
196+
}
197+
});
198+
}
199+
}
200+
catch (Exception ex)
201+
{
202+
Logger?.LogError(ex, "Error in ParameterUpdateTimer_Elapsed");
189203
}
190204
}
191205
private void PresentUpdateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
192206
{
193-
var handlers = presentUpdateTimerElapsed?.GetInvocationList();
194-
if (handlers != null)
207+
try
195208
{
196-
System.Threading.Tasks.Parallel.ForEach(handlers, handler =>
209+
var handlers = presentUpdateTimerElapsed?.GetInvocationList();
210+
if (handlers != null)
197211
{
198-
try
212+
System.Threading.Tasks.Parallel.ForEach(handlers, handler =>
199213
{
200-
((EventHandler)handler)?.Invoke(sender, EventArgs.Empty);
201-
}
202-
catch
203-
{
204-
}
205-
});
214+
try
215+
{
216+
((EventHandler)handler)?.Invoke(sender, EventArgs.Empty);
217+
}
218+
catch (Exception ex)
219+
{
220+
Logger?.LogError(ex, "Error in PresentUpdateTimerElapsed handler");
221+
}
222+
});
223+
}
224+
}
225+
catch (Exception ex)
226+
{
227+
Logger?.LogError(ex, "Error in PresentUpdateTimer_Elapsed");
206228
}
207229
}
208230
}

RDMSharp/RDM/PeerToPeerProcess.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,15 @@ public async Task Run(AsyncRDMRequestHelper asyncRDMRequestHelper = null)
161161
int counter = 0;
162162
do
163163
{
164-
await RDMSharp.Instance.lockTransaktion(UID).WaitAsync(TimeSpan.FromSeconds(7));
164+
try
165+
{
166+
await RDMSharp.Instance.lockTransaktion(UID, TimeSpan.FromSeconds(7));
167+
}
168+
catch (TimeoutException)
169+
{
170+
171+
}
172+
165173
counter++;
166174
if (response?.ResponseType == ERDM_ResponseType.ACK)
167175
return;
@@ -285,6 +293,11 @@ public async Task Run(AsyncRDMRequestHelper asyncRDMRequestHelper = null)
285293
}
286294
while (!done && State == EPeerToPeerProcessState.Running);
287295
}
296+
catch (TimeoutException te)
297+
{
298+
Logger?.LogInformation($"Timeout while running PeerToPeerProcess: {Command} UID: {UID} SubDevice: {SubDevice} Parameter: {ParameterBag.PID}");
299+
State = EPeerToPeerProcessState.Failed;
300+
}
288301
catch (Exception e)
289302
{
290303
Logger?.LogError(e);

RDMSharp/RDMSharp.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,24 @@ internal byte getTransactionCounter(UID uid)
106106
return 0;
107107
}
108108
}
109-
internal Task lockTransaktion(UID uid)
109+
internal Task lockTransaktion(UID uid, TimeSpan? timeout = null)
110110
{
111111
if (!transactionLock.TryGetValue(uid, out SemaphoreSlim semaphore))
112112
{
113113
semaphore = new SemaphoreSlim(1);
114114
transactionLock.TryAdd(uid, semaphore);
115115
}
116116

117-
return semaphore.WaitAsync();
117+
if (timeout.HasValue)
118+
try
119+
{
120+
return semaphore.WaitAsync(timeout.Value);
121+
}
122+
catch (TimeoutException) { }// Ignore Exception
123+
else
124+
return semaphore.WaitAsync();
125+
126+
return Task.CompletedTask;
118127
}
119128
internal void unlockTransaktion(UID uid)
120129
{

0 commit comments

Comments
 (0)