Skip to content

Commit 501d964

Browse files
committed
Fix exponential delay
1 parent ba59b73 commit 501d964

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

src/Tibber.Sdk/RealTimeMeasurementListener.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ private async void StartListening()
324324
continue;
325325

326326
homeStreamObserverCollection.LastMessageReceivedAt = DateTimeOffset.UtcNow;
327+
homeStreamObserverCollection.ReconnectionAttempts = 0;
327328

328329
foreach (var message in measurementGroup)
329330
{
@@ -476,14 +477,21 @@ private void CheckDataStreamAlive(object state)
476477
ResubscribeStreams(
477478
c =>
478479
{
479-
var sinceLastMessageMs = (now - c.LastMessageReceivedAt).TotalMilliseconds;
480-
if (sinceLastMessageMs <= GetDelay(c.ReconnectionAttempts).TotalMilliseconds)
480+
var sinceLastMessageMs = (now - c.LastMessageReceivedAt).TotalMilliseconds;
481+
if (sinceLastMessageMs <= StreamReSubscriptionCheckPeriodMs)
481482
return false;
482483

483-
Trace.WriteLine($"{now:yyyy-MM-dd HH:mm:ss.fff zzz} home {c.Observable.HomeId} subscription {c.Observable.SubscriptionId}: no data received during last {sinceLastMessageMs:N0} ms; re-initialize data stream");
484+
// Data not received during past minute; delay exponentially and then resubscribe
485+
var sinceLastReconnectionMs = (now - c.LastReconnectionAttemptAt).TotalMilliseconds;
486+
var delay = GetDelay(c.ReconnectionAttempts);
487+
if (sinceLastReconnectionMs <= delay.TotalMilliseconds)
488+
{
489+
Trace.WriteLine($"{now:yyyy-MM-dd HH:mm:ss.fff zzz} home {c.Observable.HomeId} subscription {c.Observable.SubscriptionId}: no data received during last {sinceLastMessageMs:N0} ms; reconnection attempts {c.ReconnectionAttempts}; resubscription delay {delay.TotalSeconds}s not passed yet");
490+
return false;
491+
}
484492

485-
if (c.LastMessageReceivedAt < c.LastReconnectionAttemptAt)
486-
c.ReconnectionAttempts++;
493+
Trace.WriteLine($"{now:yyyy-MM-dd HH:mm:ss.fff zzz} home {c.Observable.HomeId} subscription {c.Observable.SubscriptionId}: no data received during last {sinceLastMessageMs:N0} ms; reconnection attempts {c.ReconnectionAttempts}; re-initialize data stream");
494+
c.ReconnectionAttempts++;
487495
c.LastReconnectionAttemptAt = now;
488496

489497
return true;
@@ -540,7 +548,7 @@ private class HomeStreamObserverCollection
540548
public readonly List<IObserver<RealTimeMeasurement>> Observers = new();
541549
public HomeRealTimeMeasurementObservable Observable;
542550
public DateTimeOffset LastMessageReceivedAt = DateTimeOffset.MaxValue;
543-
public DateTimeOffset LastReconnectionAttemptAt = DateTimeOffset.MaxValue;
551+
public DateTimeOffset LastReconnectionAttemptAt = DateTimeOffset.MinValue;
544552
public int ReconnectionAttempts = 0;
545553
}
546554

0 commit comments

Comments
 (0)