Don't allow program to crash if there's no active provider on StartStream action
This commit is contained in:
+13
-9
@@ -16,9 +16,9 @@ type TelemetryService struct {
|
|||||||
logger *slog.Logger
|
logger *slog.Logger
|
||||||
devService *DeviceService
|
devService *DeviceService
|
||||||
// Concurrency protection
|
// Concurrency protection
|
||||||
mut sync.RWMutex
|
mut sync.RWMutex
|
||||||
ativeProvider telem.TelemetryProvider
|
activeProvider telem.TelemetryProvider
|
||||||
isConnected bool
|
isConnected bool
|
||||||
// Channel for the UI
|
// Channel for the UI
|
||||||
listeners map[string]chan telem.TelemetryData
|
listeners map[string]chan telem.TelemetryData
|
||||||
cancelForward context.CancelFunc
|
cancelForward context.CancelFunc
|
||||||
@@ -78,12 +78,12 @@ func (t *TelemetryService) SwitchProvider(newProvider telem.TelemetryProvider) e
|
|||||||
defer t.mut.Unlock()
|
defer t.mut.Unlock()
|
||||||
|
|
||||||
// Clean up the current to be old provider
|
// Clean up the current to be old provider
|
||||||
if t.ativeProvider != nil {
|
if t.activeProvider != nil {
|
||||||
t.dropActiveProvider()
|
t.dropActiveProvider()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign the new provider
|
// Assign the new provider
|
||||||
t.ativeProvider = newProvider
|
t.activeProvider = newProvider
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ func (t *TelemetryService) dropActiveProvider() {
|
|||||||
t.cancelForward()
|
t.cancelForward()
|
||||||
}
|
}
|
||||||
|
|
||||||
t.ativeProvider.StopStream()
|
t.activeProvider.StopStream()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelemetryService) SubscribeListener(id string, bufferSize int) <-chan telem.TelemetryData {
|
func (t *TelemetryService) SubscribeListener(id string, bufferSize int) <-chan telem.TelemetryData {
|
||||||
@@ -149,14 +149,18 @@ func (t *TelemetryService) UnsubscribeListener(id string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelemetryService) SubscribeToFields(fields map[int16]telem.FieldID) {
|
func (t *TelemetryService) SubscribeToFields(fields map[int16]telem.FieldID) {
|
||||||
t.ativeProvider.Subscribe(fields)
|
t.activeProvider.Subscribe(fields)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelemetryService) StartStream() {
|
func (t *TelemetryService) StartStream() {
|
||||||
slog.Debug("Stream started")
|
slog.Debug("Stream started")
|
||||||
|
|
||||||
// Start the new stream
|
// Start the new stream
|
||||||
simInCh, _ := t.ativeProvider.Stream()
|
if t.activeProvider == nil {
|
||||||
|
slog.Debug("there's no active provider. not starting the stream")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
simInCh, _ := t.activeProvider.Stream()
|
||||||
// TODO: the provider needs to be able to tell the data has stopped
|
// TODO: the provider needs to be able to tell the data has stopped
|
||||||
// so we can restart the provider lookup routine
|
// so we can restart the provider lookup routine
|
||||||
|
|
||||||
@@ -177,5 +181,5 @@ func (t *TelemetryService) StopStream() {
|
|||||||
t.cancelForward = nil
|
t.cancelForward = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
t.ativeProvider.StopStream()
|
t.activeProvider.StopStream()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user