Lab_interaccio/2019/GIGANTES-MERCE/websocket-client/mWebSockets/node.js/chat.js
2025-02-25 21:29:42 +01:00

56 lines
1.3 KiB
JavaScript

const WebSocket = require('ws');
const wss = new WebSocket.Server({ host: '192.168.46.10', port: 3000 });
var chat = {
run: function() {
wss.on('listening', function() {
let remote = this.address();
console.log(`Server running at ${remote.address}:${remote.port}`);
});
wss.on('connection', function(ws, req) {
ws.ip = req.connection.remoteAddress.replace(/^.*:/, '');
let info = `new client: ${ws.ip}`;
console.log(info);
ws.isAlive = true;
ws.on('pong', function() { this.isAlive = true; });
wss.clients.forEach((client) => {
if (client !== ws)
client.send(info);
});
ws.on('message', (message) => chat.broadcast(message, ws) );
ws.on('close', () => {
let info = `client ${ws.ip} disconnected`;
console.log(info);
wss.clients.forEach((ws) => {
ws.send(info);
});
});
});
const interval = setInterval(function ping() {
wss.clients.forEach((ws) => {
if (ws.isAlive === false)
return ws.terminate();
ws.isAlive = false;
ws.ping();
});
}, 1000);
},
broadcast: function(message, sender) {
let payload = `[${sender.ip}] > ${message}`;
console.log(payload);
wss.clients.forEach(function each(ws) {
ws.send(payload);
});
}
};
chat.run();