var http = require('http'); var fs = require('fs'); var express = require('express'); var app = express(); var path = require('path'); var server = http.createServer(app); var port = 8000; var osc = require('osc'); var activeUsers = new Set(); // Active users Set var udpPort = new osc.UDPPort({ // This is the port we're listening on. localAddress: "0.0.0.0", localPort: 57121, // This is where sclang is listening for OSC messages. remoteAddress: "192.168.2.151", //this is the hamsters ip remotePort: 8080, //this is the hamsters port :*s metadata: true }); // Open the socket. udpPort.open(); const { SerialPort } = require('serialport') const { ReadlineParser } = require('@serialport/parser-readline') const sport = new SerialPort({ path: '/dev/ttyACM0', baudRate: 115200 }) const parser = sport.pipe(new ReadlineParser({ delimiter: '\r\n' })) server.listen(port, () => { console.log("Server is listening at port %d", port); }); app.use(express.static(path.join(__dirname, "public"))); var io = require('socket.io')(server); io.on('connection', function(socket) { console.log("new user online!"); // Add the new socket ID to the activeUsers Set activeUsers.add(socket.id); // Emit the updated activeUsers Set to all connected clients io.emit('activeUsers', Array.from(activeUsers)); parser.on('data', function(data) { const msg = data.split(' '); console.log(msg[0], msg[1]); io.emit('node-data', data); }); socket.on("blink", () => { console.log("Blink event received!"); io.emit("blink"); // Emit the "blink" event to all connected clients }); socket.on('chat message', (msg) => { console.log('[user][' + socket.id + '][' + msg + ']'); socket.broadcast.emit('chat message', msg); var oscmsg = { address: "/silentserver", args: [ { type: "s", value: socket.id }, { type: "s", value: msg } ] }; udpPort.send(oscmsg); }); socket.on('userposition', (msg) => { console.log('[user][' + socket.id + '][position: ' + msg[0] + ',' + msg[1] + ']'); socket.to('expo').emit(socket.id, msg); }); // Handle disconnection event socket.on('disconnect', () => { console.log("new user online:", socket.id); // Remove the disconnected socket ID from the activeUsers Set activeUsers.delete(socket.id); // Emit the updated activeUsers Set to all connected clients io.emit('activeUsers', Array.from(activeUsers)); }); });