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
64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
// Package providers
|
|
package providers
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"esdi/providers/beamng"
|
|
"esdi/providers/iracing"
|
|
"esdi/telemetry"
|
|
|
|
bngsdk "github.com/ESilva15/gobngsdk"
|
|
"github.com/ESilva15/goirsdk"
|
|
)
|
|
|
|
// Make this be some kind of struct where we can access a function that returns
|
|
// the selected provider by its name
|
|
type Provider struct {
|
|
Name string
|
|
NewProvider func(*slog.Logger) (telemetry.TelemetryProvider, error)
|
|
IsRunning func() bool // To check if this provider is up and running
|
|
}
|
|
|
|
var Providers = map[string]Provider{
|
|
beamng.NAME: {
|
|
Name: beamng.NAME,
|
|
NewProvider: NewBeamNGProvider,
|
|
IsRunning: beamng.IsRunning,
|
|
},
|
|
iracing.NAME: {
|
|
Name: iracing.NAME,
|
|
NewProvider: NewLiveIRacingProvider,
|
|
IsRunning: iracing.IsRunning,
|
|
},
|
|
}
|
|
|
|
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, nil
|
|
}
|
|
|
|
func NewBeamNGProvider(logger *slog.Logger) (telemetry.TelemetryProvider, error) {
|
|
// TODO: these should come from some kind of config
|
|
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, nil
|
|
}
|