-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
125 lines (109 loc) · 3.47 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const express = require('express')
const socketIo = require('socket.io')
const { exec } = require('child_process') // Para ejecutar comandos en la terminal
const qrcode = require('qrcode')
const https = require('https')
const os = require('os')
const fs = require('fs')
const app = express()
const server = https.createServer(
{
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem'),
},
app,
)
const io = socketIo(server)
// Middleware para servir archivos estáticos
app.use(express.static('public'))
// Generar el QR Code
const generateQRCode = async (host, port) => {
const qrCodeData = await qrcode.toString(`https://${host}:${port}`, {
type: 'terminal',
})
console.log(`Escanea este código QR para conectarte:\n${qrCodeData}`)
}
// Obtener la dirección IP local
const getLocalIP = () => {
const networkInterfaces = os.networkInterfaces()
for (const interface in networkInterfaces) {
for (const details of networkInterfaces[interface]) {
// Filtrar por dirección IPv4 y no ser una dirección de loopback
if (details.family === 'IPv4' && !details.internal) {
return details.address
}
}
}
return '127.0.0.1' // Retornar localhost si no se encuentra una dirección IP
}
// Variables para almacenar el estado del mouse en el servidor
let mouseX = 0
let mouseY = 0
let mouseSpeed = 1 // Factor para acelerar el mouse
// Función para mover el mouse en el servidor
const moveMouse = (deltaX, deltaY) => {
// Limitar las coordenadas para que no sean negativas
mouseX = Math.max(0, mouseX + deltaX * mouseSpeed)
mouseY = Math.max(0, mouseY + deltaY * mouseSpeed)
// Redondear las coordenadas para que no tengan decimales
const roundedX = Math.round(mouseX)
const roundedY = Math.round(mouseY)
const command = `xdotool mousemove ${roundedX} ${roundedY}`
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`Error al mover el mouse: ${error.message}`)
return
}
if (stderr) {
console.error(`Error en el movimiento del mouse: ${stderr}`)
return
}
})
}
// Función para hacer clic en el servidor
const clickMouse = (button) => {
const command = `xdotool click ${button}`
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`Error al hacer clic: ${error.message}`)
return
}
if (stderr) {
console.error(`Error en el clic del mouse: ${stderr}`)
return
}
})
}
// Manejo de eventos con Socket.IO
io.on('connection', (socket) => {
console.log(`Cliente conectado: ${socket.id}`)
// Movimiento del mouse
socket.on('moveMouse', (data) => {
const { x, y } = data
// Aumentar velocidad si es necesario
const deltaX = x * mouseSpeed
const deltaY = y * mouseSpeed
// Mover el mouse en el servidor
moveMouse(deltaX, deltaY)
// console.log(`Movimiento del mouse X: ${deltaX}, Y: ${deltaY}`);
})
// Clic del mouse
socket.on('click', (button) => {
// console.log(`Click recibido en el servidor, botón: ${button}`);
clickMouse(button) // Ejecutar clic en el servidor
})
// Desconexión del cliente
socket.on('disconnect', () => {
console.log(`Cliente desconectado: ${socket.id}`)
})
})
// Servidor escuchando en el puerto disponible
server.listen(0, async () => {
console.clear()
const port = server.address().port
const host = getLocalIP()
console.log(
`Server: https://${host}:${port}\nLocal: https://127.0.0.1:${port}\n`,
)
await generateQRCode(host, port)
})