Better sdk #1

Merged
esilva merged 4 commits from better-sdk into master 2026-09-16 19:07:40 +01:00
7 changed files with 63 additions and 72 deletions
Showing only changes of commit 67b9cf617c - Show all commits
+19 -61
View File
@@ -3,11 +3,9 @@ package bngsdk
import (
"encoding/binary"
"fmt"
"io"
"log/slog"
"math"
"time"
"unsafe"
)
@@ -42,12 +40,11 @@ type Options struct {
}
type BeamNGSDK struct {
Opts Options
reader BngImporter
writer BngExporter
Data Outgauge
buffer []byte
receiver *Receiver
Opts Options
reader BngImporter
writer BngExporter
Data Outgauge
buffer []byte
}
func NewBngSDK(opts Options) (*BeamNGSDK, error) {
@@ -76,6 +73,20 @@ func NewBngSDK(opts Options) (*BeamNGSDK, error) {
return &sdk, nil
}
func (sdk *BeamNGSDK) Close() error {
sdk.buffer = nil
if sdk.writer != nil {
sdk.writer.Close()
}
if sdk.reader != nil {
sdk.reader.Close()
}
return nil
}
func (sdk *BeamNGSDK) openReader() error {
switch sdk.Opts.SourceType {
case BinaryFile:
@@ -209,59 +220,6 @@ func (sdk *BeamNGSDK) parseData(buffer []byte) error {
return ParseData(&sdk.Data, buffer)
}
// ReadData will read new data from the UDP server
func (sdk *BeamNGSDK) ReadData(timeout time.Duration) error {
buf := make([]byte, 2048)
nBytes := sdk.receiver.GetLatest(buf)
if nBytes < 0 {
return fmt.Errorf("no new data")
}
// Read the binary data into the struct
err := sdk.parseData(buf)
if err != nil {
fmt.Println("Error decoding UDP packet:", err)
return err
}
// this means there's new data
return nil
}
func (sdk *BeamNGSDK) GetBuffer() []byte {
buf := make([]byte, 2048)
sdk.receiver.GetLatest(buf)
return buf
}
func (sdk *BeamNGSDK) GetBufferPtr() []byte {
return sdk.receiver.GetBufferPtr()
}
func (sdk *BeamNGSDK) Close() {
if sdk.receiver != nil {
sdk.receiver.Close()
}
}
// Init initializes a BeamNG SDK struct
// NOTE: Change this to output a *BeamNGSDK
// func Init(ip string, port int) (BeamNGSDK, error) {
// var err error
// sdk := BeamNGSDK{}
//
// // Create the connection to the OutGauge server
// sdk.Conn, sdk.Addr, err = createUDPConnection(ip, port, int(unsafe.Sizeof(sdk.Buffer)))
// if err != nil {
// return BeamNGSDK{}, err
// }
//
// // Initiate the data variables
// sdk.Buffer = make([]byte, 1024)
//
// return sdk, nil
// }
// SDK utilities
// ShowLights - functions to check if a given dash light is on [START]
+2 -8
View File
@@ -1,19 +1,13 @@
package bngsdk
import "os"
type BngImporter interface {
Reset() error
Next([]byte) (int, error)
Close() error
}
func NewBinaryImporter(file string) (BngImporter, error) {
bin, err := os.Open(file)
if err != nil {
return nil, err
}
return OgBinReader(bin), nil
return NewOgBinReader(file), nil
}
func NewSocketImporter(address string, port int) (BngImporter, error) {
+17 -3
View File
@@ -2,23 +2,37 @@ package bngsdk
import (
"io"
"os"
"unsafe"
)
type GobReader struct {
TotalRead int64
File io.ReadSeeker
File *os.File
Buf []byte
}
func OgBinReader(r io.ReadSeeker) *GobReader {
func NewOgBinReader(fp string) *GobReader {
bin, err := os.Open(fp)
if err != nil {
return nil
}
return &GobReader{
TotalRead: 0,
File: r,
File: bin,
Buf: make([]byte, unsafe.Sizeof(Outgauge{})),
}
}
func (g *GobReader) Close() error {
if g.File != nil {
return g.File.Close()
}
return nil
}
func (g *GobReader) Reset() error {
_, err := g.File.Seek(0, io.SeekStart)
if err != nil {
+8
View File
@@ -20,6 +20,14 @@ func NewOgUDPReader(ip string, port int) (*OgUDPReader, error) {
}, nil
}
func (ogr *OgUDPReader) Close() error {
if ogr.udpConnection != nil {
return ogr.udpConnection.Close()
}
return nil
}
func (ogr *OgUDPReader) Reset() error {
// NOTE: what to implement here?
return nil
+1
View File
@@ -2,6 +2,7 @@ package bngsdk
type BngExporter interface {
Write([]byte) (int, error)
Close() error
}
func NewSocketExporter(address string, port int) (BngExporter, error) {
+8
View File
@@ -20,6 +20,14 @@ func NewOgBinWriter(path string) (*OgBinWriter, error) {
}, nil
}
func (ogw *OgBinWriter) Close() error {
if ogw.file != nil {
return ogw.file.Close()
}
return nil
}
func (ogw *OgBinWriter) Write(data []byte) (int, error) {
err := binary.Write(ogw.file, binary.LittleEndian, data)
if err != nil {
+8
View File
@@ -15,6 +15,14 @@ func NewSocketWriter(ip string, port int) (*SocketWriter, error) {
}, nil
}
func (sw *SocketWriter) Close() error {
if sw.udpConnection != nil {
return sw.udpConnection.Close()
}
return nil
}
func (sw *SocketWriter) Write(data []byte) (int, error) {
// slog.Debug("Writing", "data", data)
return sw.udpConnection.Write(data)