Files
topos/ToposServer/server.js
2023-12-04 12:18:34 +01:00

66 lines
1.7 KiB
JavaScript

const WebSocket = require("ws");
const osc = require("osc");
var pjson = require('./package.json');
// ==========================================================
// SERVER SIDE OSC FORWARDING: WebSocket => OSC
// ==========================================================
// Listening to WebSocket messages
let banner = `
┏┳┓ ┏┓┏┓┏┓
┃ ┏┓┏┓┏┓┏ ┃┃┗┓┃
┻ ┗┛┣┛┗┛┛ ┗┛┗┛┗┛
${pjson.version}\n`
const wss = new WebSocket.Server({ port: 3000 });
console.log(banner)
console.log("Listening to: ws://localhost:3000. Open Topos.\n");
// Setting up for message broadcasting
wss.on("connection", function (ws) {
console.log("> Client connected");
ws.on("message", function (data) {
try {
const message = JSON.parse(data);
sendOscMessage(message);
} catch (error) {
console.error("> Error processing message:", error);
}
});
});
wss.on("error", function (error) {
console.error("> Server error:", error);
})
wss.on("close", function () {
// Close the websocket server
wss.close();
console.log("> Closing websocket server")
});
let udpPort;
function sendOscMessage(message) {
console.log("sendOscMessage")
try {
if (!message.port === udpPort.remotePort) {
udpPort = new osc.UDPPort({
localAddress: "127.0.0.1",
localPort: 3000,
remoteAddress: "127.0.0.1",
remotePort: message.port,
});
udpPort.open();
}
udpPort.on("ready", function () {
console.log("> OSC Message:", message);
udpPort.send(message);
});
} catch (error) {
console.log(error)
}
}