pain/index.js

76 lines
2.0 KiB
JavaScript

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);
});