mirror of
https://github.com/jwetzell/psn-js.git
synced 2026-07-26 10:38:50 +00:00
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
// recreation of psn_server.cpp example from https://github.com/vyv/psn-cpp
|
|
const dgram = require('node:dgram');
|
|
const { Encoder, Tracker } = require('@jwetzell/posistagenet');
|
|
|
|
const client = dgram.createSocket('udp4');
|
|
const encoder = new Encoder('Test PSN Server', 2, 0);
|
|
|
|
const trackers = [];
|
|
|
|
trackers.push(new Tracker(0, 'Sun'));
|
|
trackers.push(new Tracker(1, 'Mercury'));
|
|
trackers.push(new Tracker(2, 'Venus'));
|
|
trackers.push(new Tracker(3, 'Earth'));
|
|
trackers.push(new Tracker(4, 'Mars'));
|
|
trackers.push(new Tracker(5, 'Jupiter'));
|
|
trackers.push(new Tracker(6, 'Saturn'));
|
|
trackers.push(new Tracker(7, 'Uranus'));
|
|
trackers.push(new Tracker(8, 'Neptune'));
|
|
trackers.push(new Tracker(9, 'Pluto'));
|
|
|
|
const orbits = [1.0, 88.0, 224.7, 365.2, 687, 4332, 10760, 30700, 60200, 90600];
|
|
const distFromSun = [
|
|
0, 0.58, 1.08, 1.5, 2.28, 7.78, 14.29, 28.71, 45.04, 59.13,
|
|
];
|
|
|
|
let timestamp = 0;
|
|
setInterval(() => {
|
|
orbits.forEach((_, index) => {
|
|
const a = 1.0 / orbits[index];
|
|
const b = distFromSun[index];
|
|
const x = timestamp;
|
|
const cb = Math.cos(a * x) * b;
|
|
const sb = Math.sin(a * x) * b;
|
|
|
|
trackers[index].setPos(sb, 0, cb);
|
|
trackers[index].setSpeed(a * cb, 0, -a * sb);
|
|
trackers[index].setOri(0, x / 1000.0, 0);
|
|
trackers[index].setAccel(-a * a * sb, 0, -a * a * cb);
|
|
trackers[index].setTrgtPos(3, 14, 16);
|
|
trackers[index].setStatus(index / 10.0);
|
|
trackers[index].setTimestamp(timestamp);
|
|
});
|
|
|
|
console.log(`Sending Data Packets`);
|
|
const dataPackets = encoder.getDataPackets(timestamp, trackers);
|
|
dataPackets.forEach((packet) => {
|
|
client.send(packet, 56565, '236.10.10.10');
|
|
});
|
|
timestamp += 1;
|
|
}, 5);
|
|
|
|
setInterval(() => {
|
|
console.log(`Sending Info Packets`);
|
|
const infoPackets = encoder.getInfoPackets(timestamp, trackers);
|
|
infoPackets.forEach((packet) => {
|
|
client.send(packet, 56565, '236.10.10.10');
|
|
});
|
|
}, 500);
|