recreate examples from psn-js and vyv

This commit is contained in:
2024-12-19 18:30:35 -06:00
parent e8422106ca
commit eb1785f668
5 changed files with 246 additions and 31 deletions
-31
View File
@@ -1,31 +0,0 @@
package main
import (
"fmt"
"log/slog"
"github.com/jwetzell/psn-go/internal/decoders"
)
func main() {
infoDecoded, error := decoders.DecodePacketChunk([]byte{0x56, 0x67, 0x34, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01,
0x01, 0x01, 0x00, 0x0b, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x02, 0x00, 0x11,
0x80, 0x01, 0x00, 0x0d, 0x80, 0x00, 0x00, 0x09, 0x00, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x31})
if error != nil {
slog.Error("problem decoding packet", "error", error)
} else {
fmt.Printf("decoded: %+v\n", infoDecoded)
}
dataDecoded, error := decoders.DecodePacketChunk([]byte{0x55, 0x67, 0x28, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01,
0x01, 0x01, 0x00, 0x14, 0x80, 0x01, 0x00, 0x10, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00,
0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f})
if error != nil {
slog.Error("problem decoding packet", "error", error)
} else {
fmt.Printf("decoded: %+v\n", dataDecoded)
}
}
+33
View File
@@ -0,0 +1,33 @@
package main
import (
"encoding/json"
"fmt"
"github.com/jwetzell/psn-go"
)
func main() {
decoder := psn.NewDecoder()
infoPacketBytes := []byte{0x56, 0x67, 0x34, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01,
0x01, 0x01, 0x00, 0x0b, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x02, 0x00, 0x11,
0x80, 0x01, 0x00, 0x0d, 0x80, 0x00, 0x00, 0x09, 0x00, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x31}
dataPacketBytes := []byte{0x55, 0x67, 0x28, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x01,
0x01, 0x01, 0x00, 0x14, 0x80, 0x01, 0x00, 0x10, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00,
0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f}
decoder.Decode(infoPacketBytes)
decoder.Decode(dataPacketBytes)
fmt.Printf("decoded: %+v\n", decoder.SystemName)
trackers, err := json.MarshalIndent(decoder.Trackers, "", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(trackers))
}
+45
View File
@@ -0,0 +1,45 @@
package main
import (
"fmt"
"github.com/jwetzell/psn-go"
)
func main() {
encoder := psn.Encoder{
SystemName: "Server Name",
VersionHigh: 2,
VersionLow: 3,
}
tracker := psn.Tracker{
Id: 1,
Name: "Tracker 1",
}
tracker.SetPos(1.0, 1.0, 1.0)
trackers := []psn.Tracker{
tracker,
}
timestamp := 1
dataPackets := encoder.GetDataPackets(uint64(timestamp), trackers)
infoPackets := encoder.GetInfoPackets(uint64(timestamp), trackers)
for _, dataPacket := range dataPackets {
println("send packet somehow")
fmt.Printf("%v\n", dataPacket)
}
for _, infoPacket := range infoPackets {
println("send packet somehow")
fmt.Printf("%v\n", infoPacket)
}
}
+83
View File
@@ -0,0 +1,83 @@
package main
import (
"fmt"
"net"
"time"
"github.com/jwetzell/psn-go"
)
func main() {
addr, err := net.ResolveUDPAddr("udp", "236.10.10.10:56565")
if err != nil {
fmt.Printf("Error %v\n", err)
return
}
client, err := net.ListenMulticastUDP("udp", nil, addr)
if err != nil {
fmt.Printf("Error %v\n", err)
return
}
defer client.Close()
decoder := psn.NewDecoder()
lastPrintMillis := time.Now().UnixMilli()
for {
buffer := make([]byte, 2048)
length, _, err := client.ReadFromUDP(buffer)
if err != nil {
fmt.Printf("Error %v", err)
}
if length > 0 {
decoder.Decode(buffer)
}
if time.Now().UnixMilli()-lastPrintMillis > 1000 {
if decoder.SystemName != "" {
fmt.Printf("System Name: %s\n", decoder.SystemName)
}
fmt.Printf("Tracker Count: %d\n", len(decoder.Trackers))
for id, tracker := range decoder.Trackers {
fmt.Printf("Tracker - id: %d | name: %s\n", id, tracker.Name)
if tracker.Pos != nil {
fmt.Printf("\tpos: %f,%f,%f\n", tracker.Pos.X, tracker.Pos.Y, tracker.Pos.Z)
}
if tracker.Speed != nil {
fmt.Printf("\tspeed: %f,%f,%f\n", tracker.Speed.X, tracker.Speed.Y, tracker.Speed.Z)
}
if tracker.Ori != nil {
fmt.Printf("\tori: %f,%f,%f\n", tracker.Ori.X, tracker.Ori.Y, tracker.Ori.Z)
}
if tracker.Validity != nil {
fmt.Printf("\tstatus: %f\n", *tracker.Validity)
}
if tracker.Accel != nil {
fmt.Printf("\taccel: %f,%f,%f\n", tracker.Accel.X, tracker.Accel.Y, tracker.Accel.Z)
}
if tracker.TrgtPos != nil {
fmt.Printf("\ttrgtpos: %f,%f,%f\n", tracker.TrgtPos.X, tracker.TrgtPos.Y, tracker.TrgtPos.Z)
}
if tracker.Timestamp != nil {
fmt.Printf("\ttimestamp: %d\n", *tracker.Timestamp)
}
}
lastPrintMillis = time.Now().UnixMilli()
}
}
}
+85
View File
@@ -0,0 +1,85 @@
package main
import (
"fmt"
"math"
"net"
"time"
"github.com/jwetzell/psn-go"
)
func main() {
client, err := net.Dial("udp", "236.10.10.10:56565")
if err != nil {
fmt.Printf("Error %v\n", err)
return
}
encoder := psn.Encoder{
SystemName: "Test PSN Server",
VersionHigh: 2,
VersionLow: 0,
}
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"})
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()
for {
if (time.Now().UnixMilli() - lastInfoMillis) > 500 {
fmt.Println("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 {
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))
}
fmt.Println("Sending Data Packets")
dataPackets := encoder.GetDataPackets(uint64(timestamp), trackers)
for _, DataPacket := range dataPackets {
client.Write(DataPacket)
}
lastDataMillis = time.Now().UnixMilli()
timestamp += 1
}
}
}