Added the record command

Very basic, but it will do for testing
This commit is contained in:
2025-10-02 10:53:06 +01:00
parent edbd030bfc
commit 68174c72f2
2 changed files with 76 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
package cmd
import (
"fmt"
"github.com/ESilva15/BeamNGMockOg/mockserver"
"github.com/spf13/cobra"
)
func recordAction(cmd *cobra.Command, args []string) {
outputFile, _ := cmd.Flags().GetString("output")
address, _ := cmd.Flags().GetString("address")
port, _ := cmd.Flags().GetInt("port")
if err := mockserver.Record(address, port, outputFile); err != nil {
fmt.Printf("Something went wrong while recording the file: %v", err)
}
}
// shelf
var recordCmd = &cobra.Command{
Use: "record",
Short: "record -o <path-to-bin-file>",
Long: `record will store the data from the given UDP server to the
filepath given by -i`,
Args: nil,
Run: recordAction,
}
func init() {
rootCmd.AddCommand(recordCmd)
recordCmd.PersistentFlags().StringP("output", "o", "output.bin", "output file for recording")
}
+41
View File
@@ -0,0 +1,41 @@
package mockserver
import (
"encoding/gob"
"log"
"os"
"time"
bngsdk "github.com/ESilva15/gobngsdk"
)
// Record records data from the UDP connection created by address and port
func Record(address string, port int, filePath string) error {
ticker := time.NewTicker(time.Second / 60)
defer ticker.Stop()
// Create the output file
bin, err := os.Create(filePath)
if err != nil {
return err
}
// Create the BeamNGSDK instance
beam, err := bngsdk.Init(address, port)
if err != nil {
return err
}
defer beam.Close()
enc := gob.NewEncoder(bin)
for {
err := beam.ReadData()
if err != nil {
return err
}
if err := enc.Encode(beam.Data); err != nil {
log.Fatal(err)
}
<-ticker.C
}
}