peripheral can connect mid stream and start go into streaming immidiately

This commit is contained in:
2026-09-23 13:40:31 +01:00
parent 76d758e264
commit a519cf473e
6 changed files with 53 additions and 25 deletions
+7 -17
View File
@@ -7,7 +7,6 @@ import (
"sync"
"time"
"esdi/peripheral"
"esdi/providers"
"esdi/telemetry"
telem "esdi/telemetry"
@@ -37,7 +36,8 @@ type TelemetryService struct {
healthCheckCancel context.CancelFunc
// Callbacks
// Devices data request
peripheralProvider func() []peripheral.Peripheral
// peripheralProvider func() []peripheral.Peripheral
getRequiredFields func() []telemetry.FieldID
}
func NewTelemetryService(
@@ -114,23 +114,13 @@ func (t *TelemetryService) UnsubscribeListener(id string) {
}
}
func (t *TelemetryService) SubscribeToFields() []telem.FieldID {
seen := make(map[telemetry.FieldID]struct{})
var allFields []telemetry.FieldID
func (t *TelemetryService) SubscribeToAllFields() []telem.FieldID {
fields := t.getRequiredFields()
for _, dev := range t.peripheralProvider() {
for _, field := range dev.RequiredFields() {
if _, exists := seen[field]; !exists {
seen[field] = struct{}{}
allFields = append(allFields, field)
}
}
}
t.logger.Debug("requested fields", "fields", fields)
t.activeProvider.Subscribe(fields)
t.logger.Debug("requested fields", "fields", allFields)
t.activeProvider.Subscribe(allFields)
return allFields
return fields
}
// Listener Control [END] ------------------------------------------------------