const robot = require('robotjs'); const WebSocket = require('ws'); const mode = 'client'; // 'host' or 'client' const server = 'ws://node.janderedev.xyz:8080'; if (mode == 'host') { const server = new WebSocket.Server({ port: 8080 }); let pos = {} let sockets = []; server.on('connection', async (socket) => { console.log('New connection'); sockets.push(socket); // When you receive a message, send that message to every socket. socket.on('message', function(msg) { console.log(`[SERVER] Received message: ${msg}`); let [x, y] = msg.split(':'); x = Number(x); y = Number(y); pos[socket] = { x, y } }); // When a socket closes, or disconnects, remove it from the array. socket.on('close', function() { console.log('Socket closed'); sockets = sockets.filter(s => s !== socket); }); setInterval(() => { let x = 0, y = 0; Object.values(pos).forEach(val => { x += val.x; y += val.y; }); sockets.forEach(s => s.send(`${x}:${y}`)); }, 50); }); } let getPos = () => { let { x, y } = robot.getMousePos(); let screenSize = robot.getScreenSize(); x = x / screenSize.width; y = y / screenSize.height; return { x, y } } let connected = false; const client = new WebSocket(mode == 'host' ? 'ws://localhost:8080' : server); client.on('open', () => { console.log('Connected'); connected = true; }); setInterval(() => { if (!connected) return; let pos = getPos(); client.send(`${pos.x}:${pos.y}`); }, 50); client.on('message', (msg) => { console.log(`[CLIENT] Received message: ${msg}`); let [x, y] = msg.split(':'); x = Number(x); y = Number(y); let screenSize = robot.getScreenSize(); robot.moveMouse(x * screenSize.width, y * screenSize.height); });