From 0b20f3ffb9d5651c234a8ee69a1461efae05bf7b Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 4 Dec 2025 17:46:58 -0600 Subject: [PATCH] update examples --- examples/benchmark/main.go | 6 ++-- examples/encode/main.go | 4 +-- examples/psn_server/main.go | 70 +++++++++++++++++++------------------ 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/examples/benchmark/main.go b/examples/benchmark/main.go index 6655e33..b9e7fbf 100644 --- a/examples/benchmark/main.go +++ b/examples/benchmark/main.go @@ -7,11 +7,11 @@ import ( "github.com/jwetzell/psn-go" ) -func getNTrackers(n int) []psn.Tracker { - trackers := []psn.Tracker{} +func getNTrackers(n int) []*psn.Tracker { + trackers := []*psn.Tracker{} for index := 0; index < n; index++ { - tracker := psn.Tracker{Id: uint16(index), Name: "Tracker"} + tracker := &psn.Tracker{Id: uint16(index), Name: "Tracker"} tracker.SetPos(0, 0, 0) tracker.SetSpeed(0, 0, 0) tracker.SetOri(0, 0, 0) diff --git a/examples/encode/main.go b/examples/encode/main.go index e63bf61..918ac35 100644 --- a/examples/encode/main.go +++ b/examples/encode/main.go @@ -13,14 +13,14 @@ func main() { VersionLow: 3, } - tracker := psn.Tracker{ + tracker := &psn.Tracker{ Id: 1, Name: "Tracker 1", } tracker.SetPos(1.0, 1.0, 1.0) - trackers := []psn.Tracker{ + trackers := []*psn.Tracker{ tracker, } diff --git a/examples/psn_server/main.go b/examples/psn_server/main.go index f392f71..150bfbd 100644 --- a/examples/psn_server/main.go +++ b/examples/psn_server/main.go @@ -23,62 +23,64 @@ func main() { VersionLow: 0, } - trackers := []psn.Tracker{} + trackers := []*psn.Tracker{} - trackers = append(trackers, psn.Tracker{Id: 0, Name: "Sun"}) - trackers = append(trackers, psn.Tracker{Id: 1, Name: "Mercury"}) - trackers = append(trackers, psn.Tracker{Id: 2, Name: "Venus"}) - trackers = append(trackers, psn.Tracker{Id: 3, Name: "Earth"}) - trackers = append(trackers, psn.Tracker{Id: 4, Name: "Mars"}) - trackers = append(trackers, psn.Tracker{Id: 5, Name: "Jupiter"}) - trackers = append(trackers, psn.Tracker{Id: 6, Name: "Saturn"}) - trackers = append(trackers, psn.Tracker{Id: 7, Name: "Uranus"}) - trackers = append(trackers, psn.Tracker{Id: 8, Name: "Neptune"}) - trackers = append(trackers, psn.Tracker{Id: 9, Name: "Pluto"}) + trackers = append(trackers, &psn.Tracker{Id: 0, Name: "Sun"}) + trackers = append(trackers, &psn.Tracker{Id: 1, Name: "Mercury"}) + trackers = append(trackers, &psn.Tracker{Id: 2, Name: "Venus"}) + trackers = append(trackers, &psn.Tracker{Id: 3, Name: "Earth"}) + trackers = append(trackers, &psn.Tracker{Id: 4, Name: "Mars"}) + trackers = append(trackers, &psn.Tracker{Id: 5, Name: "Jupiter"}) + trackers = append(trackers, &psn.Tracker{Id: 6, Name: "Saturn"}) + trackers = append(trackers, &psn.Tracker{Id: 7, Name: "Uranus"}) + trackers = append(trackers, &psn.Tracker{Id: 8, Name: "Neptune"}) + trackers = append(trackers, &psn.Tracker{Id: 9, Name: "Pluto"}) orbits := []float32{1.0, 88.0, 224.7, 365.2, 687, 4332, 10760, 30700, 60200, 90600} distFromSun := []float32{0, 0.58, 1.08, 1.5, 2.28, 7.78, 14.29, 28.71, 45.04, 59.13} timestamp := 0 - lastInfoMillis := time.Now().UnixMilli() - lastDataMillis := time.Now().UnixMilli() + dataTicker := time.NewTicker(time.Millisecond * 16) + infoTicker := time.NewTicker(time.Millisecond * 1000) - for { - if (time.Now().UnixMilli() - lastInfoMillis) > 500 { - slog.Info("Sending Info Packets") - infoPackets := encoder.GetInfoPackets(uint64(timestamp), trackers) - for _, infoPacket := range infoPackets { - client.Write(infoPacket) - } - lastInfoMillis = time.Now().UnixMilli() - } - - if (time.Now().UnixMilli() - lastDataMillis) > 5 { - for index, orbit := range orbits { + go func() { + for { + for index, tracker := range trackers { + orbit := orbits[index] a := 1.0 / orbit b := distFromSun[index] x := timestamp cb := math.Cos(float64(a*float32(x))) * float64(b) sb := math.Sin(float64(a*float32(x))) * float64(b) - trackers[index].SetPos(float32(sb), 0, float32(cb)) - trackers[index].SetSpeed(a*float32(cb), 0, -a*float32(sb)) - trackers[index].SetOri(0, float32(x)/1000.0, 0) - trackers[index].SetAccel(-a*a*float32(sb), 0, -a*a*float32(cb)) - trackers[index].SetTrgtPos(3, 14, 16) - trackers[index].SetStatus(float32(index) / 10.0) - trackers[index].SetTimestamp(uint64(timestamp)) + tracker.SetPos(float32(sb), 0, float32(cb)) + tracker.SetSpeed(a*float32(cb), 0, -a*float32(sb)) + tracker.SetOri(0, float32(x)/1000.0, 0) + tracker.SetAccel(-a*a*float32(sb), 0, -a*a*float32(cb)) + tracker.SetTrgtPos(3, 14, 16) + tracker.SetStatus(float32(index) / 10.0) + tracker.SetTimestamp(uint64(timestamp)) } + time.Sleep(time.Millisecond * 16) + } + }() + for { + select { + case <-infoTicker.C: + slog.Info("Sending Info Packets") + infoPackets := encoder.GetInfoPackets(uint64(timestamp), trackers) + for _, infoPacket := range infoPackets { + client.Write(infoPacket) + } + case <-dataTicker.C: slog.Info("Sending Data Packets") dataPackets := encoder.GetDataPackets(uint64(timestamp), trackers) for _, DataPacket := range dataPackets { client.Write(DataPacket) } - lastDataMillis = time.Now().UnixMilli() timestamp += 1 } - } }