Files
TelemetryMockserver/mockserver/replay.go
T

55 lines
1.1 KiB
Go

// Package mockserver is the core of this program and it will have the API
// to record binary data from the UDP server and then be able to mock it
package mockserver
import (
"bytes"
"encoding/binary"
"encoding/gob"
"log"
"os"
"time"
sdk "github.com/ESilva15/gobngsdk"
)
// Replay replays a given file <fp> in a UDP server <addr>:<port>
func Replay(address string, port int, fp string) error {
bin, err := os.Open(fp)
if err != nil {
log.Fatal("error opening file:", err)
}
udp, err := newUDPServer(address, port)
if err != nil {
return err
}
ticker := time.NewTicker(time.Second / 60)
defer ticker.Stop()
dec := gob.NewDecoder(bin)
for {
var og sdk.Outgauge
if err := dec.Decode(&og); err != nil {
log.Fatal("failed to read more data:", err)
break
}
buf := new(bytes.Buffer)
if err := binary.Write(buf, binary.LittleEndian, &og); err != nil {
log.Fatal("serialization failed:", err)
break
}
if _, err := udp.Conn.WriteToUDP(buf.Bytes(), udp.Addr); err != nil {
log.Fatal("send failed:", err)
break
}
<-ticker.C
}
return udp.Close()
}