mirror of
https://github.com/jwetzell/psn-go.git
synced 2026-08-11 02:13:52 +00:00
recreate examples from psn-js and vyv
This commit is contained in:
@@ -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)
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user