76 lines
2.0 KiB
JavaScript
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);
|
|
}); |