sound-parade/puredata/nodejs/sender.js
2022-01-26 17:47:16 +09:00

100 lines
2.9 KiB
JavaScript

const osc = require("osc");
const udp = new osc.UDPPort({
localAddress: '0.0.0.0', //<-- NOTE: '127.0.0.1' doesn't work!! for comm. between different machines
localPort: 57001, remoteAddress: '0.0.0.0', remotePort: 57000, metadata: true
});
//firstly establish/prepare osc conn.
Promise.all([
new Promise((resolve, reject) => udp.on("ready", () => resolve('resolve: udp ready.'))),
]).then(results => {
console.log(results[0]);
const io = require('socket.io-client');
const socket = io('https://walkingtowardstheflow.xyz');
socket.on('connect', () => {
console.log("[osc-receiver] i'm connected.");
socket.emit("room", 1, (res) => console.log(res));
});
socket.on('disconnect', () => console.log("[osc-receiver] i'm disconnected."));
//from browser
socket.on('post', p => {
console.log('post', p);
});
//from puredata
udp.on("message", function (m) {
// console.log("osc(pd)", m);
//
if (m.address == '/flow') {
socket.emit('flow', m.args[0].value);
}
//
else if (m.address == '/info') {
socket.emit('info', (fields) => {
console.log(fields.length);
//
var flags = [];
for (let k = 0; k < fields.length; k++) {
if (fields[k].group == "flag") flags.push({type:'f', value:k});
}
udp.send({
address: '/info/flags',
args: flags
})
//
var bodies = [];
for (let k = 0; k < fields.length; k++) {
if (fields[k].group == "body") bodies.push({type:'f', value:k});
}
udp.send({
address: '/info/bodies',
args: bodies
})
//
var objects = [];
for (let k = 0; k < fields.length; k++) {
if (fields[k].group == "object") objects.push({type:'f', value:k});
}
udp.send({
address: '/info/objects',
args: objects
})
//
var ones = [];
for (let k = 0; k < fields.length; k++) {
if (fields[k].group == "any") ones.push({type:'f', value:k});
}
udp.send({
address: '/info/ones',
args: ones
})
//
udp.send({
address: '/info/entries',
args:[
{type: 'f', value: fields.length},
{type: 'f', value: flags.length},
{type: 'f', value: bodies.length},
{type: 'f', value: objects.length},
{type: 'f', value: ones.length},
]
});
});
}
});
});
//osc.js - start service
udp.open();
udp.on("ready", () => console.log(
"[udp] ready (udp) : \n" +
"\tlistening on --> " + udp.options.localAddress + ":" + udp.options.localPort + "\n" +
"\tspeaking to -> " + udp.options.remoteAddress + ":" + udp.options.remotePort + "\n"
));