basic loop to discover providers
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package beamng
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
func IsRunning() bool {
|
||||
// The address should be loaded from some type of configuration
|
||||
addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:4443")
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
conn, err := net.ListenUDP("udp", addr)
|
||||
defer conn.Close()
|
||||
if err != nil {
|
||||
slog.Debug("failed to listen to udp socket: " + err.Error())
|
||||
return false
|
||||
}
|
||||
|
||||
buf := make([]byte, 512)
|
||||
conn.SetReadDeadline(time.Now().Add(50 * time.Millisecond))
|
||||
|
||||
n, _, err := conn.ReadFromUDP(buf)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// Think of a better number or something
|
||||
return n >= 80
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package iracing
|
||||
|
||||
import "github.com/ESilva15/goirsdk"
|
||||
|
||||
func IsRunning() bool {
|
||||
sdk, err := goirsdk.Init(goirsdk.Options{
|
||||
SourceType: goirsdk.SharedMemoryFile,
|
||||
})
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
sdk.Close()
|
||||
|
||||
return true
|
||||
}
|
||||
+23
-9
@@ -14,28 +14,42 @@ import (
|
||||
// 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
|
||||
Provider telemetry.TelemetryProvider
|
||||
Name string
|
||||
NewProvider func(*slog.Logger) telemetry.TelemetryProvider
|
||||
IsRunning func() bool
|
||||
}
|
||||
|
||||
var Providers = map[string]Provider{
|
||||
beamng.NAME: {
|
||||
Name: beamng.NAME,
|
||||
Name: beamng.NAME,
|
||||
NewProvider: NewBeamNGProvider,
|
||||
IsRunning: beamng.IsRunning,
|
||||
},
|
||||
iracing.NAME: {
|
||||
Name: iracing.NAME,
|
||||
Name: iracing.NAME,
|
||||
NewProvider: NewLiveIRacingProvider,
|
||||
IsRunning: iracing.IsRunning,
|
||||
},
|
||||
}
|
||||
|
||||
func NewIRacingProvider(logger *slog.Logger, opts goirsdk.Options,
|
||||
) telemetry.TelemetryProvider {
|
||||
provider, _ := iracing.NewIRacingProvider(logger, opts)
|
||||
// func NewIRacingProvider(logger *slog.Logger, opts goirsdk.Options,
|
||||
// ) telemetry.TelemetryProvider {
|
||||
// provider, _ := iracing.NewIRacingProvider(logger, opts)
|
||||
//
|
||||
// return provider
|
||||
// }
|
||||
|
||||
func NewLiveIRacingProvider(logger *slog.Logger) telemetry.TelemetryProvider {
|
||||
provider, _ := iracing.NewIRacingProvider(logger, goirsdk.Options{
|
||||
SourceType: goirsdk.SharedMemoryFile,
|
||||
})
|
||||
|
||||
return provider
|
||||
}
|
||||
|
||||
func NewBeamNGProvider(ip string, port int) telemetry.TelemetryProvider {
|
||||
provider, _ := beamng.NewBeamNGProvider(ip, port)
|
||||
func NewBeamNGProvider(logger *slog.Logger) telemetry.TelemetryProvider {
|
||||
// Get from some kind of config or whatever
|
||||
provider, _ := beamng.NewBeamNGProvider("127.0.0.1", 4443)
|
||||
|
||||
return provider
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user