this is a doozy - device auto discovery and handling

The main goal was to decouple more things
We got devices being looked for in the background and the stream view
is like a device now too
This commit is contained in:
2026-09-17 22:55:17 +01:00
parent 20025dae1b
commit 65f03fd4c9
17 changed files with 327 additions and 111 deletions
+4
View File
@@ -88,6 +88,10 @@ func (b *BeamNG) Close() {
b.SDK.Close()
}
func (b *BeamNG) Name() string {
return NAME
}
func (b *BeamNG) IsAlive(timeout time.Duration) bool {
_, err := b.SDK.Update()
return err == nil
+4
View File
@@ -264,6 +264,10 @@ func (i *IRacing) Subscribe(requestFields map[int16]telemetry.FieldID) {
i.logger.Debug(fmt.Sprintf("Subscribed: %+v\n", i.data.ActiveBinds))
}
func (i *IRacing) Name() string {
return NAME
}
func (i *IRacing) IsAlive(timeout time.Duration) bool {
if !i.SDK.CheckForDataEvent(timeout) {
return false
+15 -7
View File
@@ -16,7 +16,7 @@ import (
// the selected provider by its name
type Provider struct {
Name string
NewProvider func(*slog.Logger) telemetry.TelemetryProvider
NewProvider func(*slog.Logger) (telemetry.TelemetryProvider, error)
IsRunning func() bool // To check if this provider is up and running
}
@@ -33,23 +33,31 @@ var Providers = map[string]Provider{
},
}
func NewLiveIRacingProvider(logger *slog.Logger) telemetry.TelemetryProvider {
provider, _ := iracing.NewIRacingProvider(logger, goirsdk.Options{
func NewLiveIRacingProvider(logger *slog.Logger) (telemetry.TelemetryProvider, error) {
provider, err := iracing.NewIRacingProvider(logger, goirsdk.Options{
Logger: logger,
SourceType: goirsdk.SharedMemoryFile,
})
if err != nil {
logger.Error("failed to create iRacing provider", "err", err)
return nil, err
}
return provider
return provider, nil
}
func NewBeamNGProvider(logger *slog.Logger) telemetry.TelemetryProvider {
func NewBeamNGProvider(logger *slog.Logger) (telemetry.TelemetryProvider, error) {
// TODO: these should come from some kind of config
provider, _ := beamng.NewBeamNGProvider(logger, &bngsdk.Options{
provider, err := beamng.NewBeamNGProvider(logger, &bngsdk.Options{
Logger: logger.With("TelemetryProvider", beamng.NAME),
SourceType: bngsdk.UDPData,
ImportUDPAddress: "127.0.0.1",
ImportUDPPort: 4444,
})
if err != nil {
logger.Error("failed to create BeamNG provider", "err", err)
return nil, err
}
return provider
return provider, nil
}