fixed a problem with the transforms that would just error out if the value was nil

This commit is contained in:
2026-05-27 17:54:05 +01:00
parent 1cb1d64ebe
commit d5336cc01e
2 changed files with 50 additions and 11 deletions
+18
View File
@@ -40,15 +40,33 @@ func PitSpeedLimiterTransform(v any, out *telem.TelemetryField) {
func UInt8Transform(v any, out *telem.TelemetryField) {
out.Type = telem.DataTypeUINT8
if v == nil {
out.Raw = 0
return
}
out.Raw = uint64(v.(int))
}
func FloatToStringTransform(v any, out *telem.TelemetryField) {
out.Type = telem.DataTypeSTRING
if v == nil {
out.Str = "inv"
return
}
out.Str = strconv.FormatFloat(float64(v.(float32)), 'f', 1, 32)
}
func FloatToUInt8Transform(v any, out *telem.TelemetryField) {
out.Type = telem.DataTypeUINT8
if v == nil {
out.Raw = uint64(0)
return
}
out.Raw = uint64(v.(float32))
}
+32 -11
View File
@@ -6,9 +6,7 @@ package iracing
import (
"context"
"fmt"
"log"
"log/slog"
"os"
"strconv"
"sync"
"time"
@@ -44,17 +42,21 @@ func NewIRacingProvider(
) (*IRacing, error) {
var err error
// Open the input file if provided
var file *os.File = nil
if source != "" {
file, err = os.Open(source)
if err != nil {
log.Fatalf("Failed to open IBT file: %v", err)
}
}
// Open the input file if provided - otherwise live telemetry was requested
// Maybe this can be changed so we don't have to run it with these ifs but by configuring our
// provider
// var file goirsdk.Reader = nil
// if source != "" {
// file, err = os.Open(source)
// if err != nil {
// return &IRacing{}, err
// // log.Fatalf("Failed to open IBT file: %v", err)
// }
// }
sdk, err := goirsdk.Init(file, telemOut, yamlOut)
sdk, err := goirsdk.Init(nil, telemOut, yamlOut)
if err != nil {
logger.Error("failed to open the IRSDK instance")
return &IRacing{}, err
}
@@ -68,11 +70,30 @@ func NewIRacingProvider(
}, nil
}
func (i *IRacing) isDataAvailable() bool {
// Its offline telemetry, data must be available
if i.SDK.File != nil {
return true
}
// Check if live telemetry is on
if i.SDK.IsConnected() {
return true
}
return false
}
func (i *IRacing) stream(ctx context.Context) {
i.data.InitialTime = time.Now()
go func() {
for {
// We start by checking if we do or do not have data available
if !i.isDataAvailable() {
continue
}
select {
case <-ctx.Done():
return