From 67b9cf617c26b0b3da981032bba13ba5b43dfb34 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Tue, 15 Sep 2026 17:41:11 +0100 Subject: [PATCH] added Close() methods to the structs --- bngsdk.go | 80 ++++++++++++------------------------------------ reader.go | 10 ++---- reader_binary.go | 20 ++++++++++-- reader_socket.go | 8 +++++ writer.go | 1 + writer_binary.go | 8 +++++ writer_socket.go | 8 +++++ 7 files changed, 63 insertions(+), 72 deletions(-) diff --git a/bngsdk.go b/bngsdk.go index bb664ed..10b9e77 100644 --- a/bngsdk.go +++ b/bngsdk.go @@ -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] diff --git a/reader.go b/reader.go index e6f4867..0cb7963 100644 --- a/reader.go +++ b/reader.go @@ -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) { diff --git a/reader_binary.go b/reader_binary.go index bf7d1b0..7ff138e 100644 --- a/reader_binary.go +++ b/reader_binary.go @@ -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 { diff --git a/reader_socket.go b/reader_socket.go index cd4aea1..b1ccf8f 100644 --- a/reader_socket.go +++ b/reader_socket.go @@ -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 diff --git a/writer.go b/writer.go index 027a087..5d7eaad 100644 --- a/writer.go +++ b/writer.go @@ -2,6 +2,7 @@ package bngsdk type BngExporter interface { Write([]byte) (int, error) + Close() error } func NewSocketExporter(address string, port int) (BngExporter, error) { diff --git a/writer_binary.go b/writer_binary.go index a4daa74..0bc16d9 100644 --- a/writer_binary.go +++ b/writer_binary.go @@ -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 { diff --git a/writer_socket.go b/writer_socket.go index c35ceac..9b347c3 100644 --- a/writer_socket.go +++ b/writer_socket.go @@ -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)