Files
segnapunti/vite-plugin-websocket.js
T
davide 2fe1808fc9 refactor(server): porta singola, /display e /controller come percorsi
Unifica i due server Express (display :3000, controller :3001) in un
unico processo su PORT (default 3000). Le route /display e /controller
servono rispettivamente index.html e controller.html.

In sviluppo elimina il server proxy su :3001; il plugin Vite riscrive
/display → / e /controller → /controller.html internamente.
printServerInfo aggiornata alla firma a porta singola.
2026-05-12 12:22:50 +02:00

35 lines
1.2 KiB
JavaScript

import { WebSocketServer } from 'ws'
import { setupWebSocketHandler } from './src/websocket-handler.js'
import { printServerInfo } from './src/server-utils.js'
export default function websocketPlugin() {
return {
name: 'vite-plugin-websocket',
configureServer(server) {
const wss = new WebSocketServer({ noServer: true })
setupWebSocketHandler(wss)
// Rewrite /display → / (index.html) e /controller → /controller.html
server.middlewares.use((req, _res, next) => {
if (req.url === '/display' || req.url === '/display/') req.url = '/'
else if (req.url === '/controller' || req.url === '/controller/') req.url = '/controller.html'
next()
})
server.httpServer.on('upgrade', (request, socket, head) => {
const pathname = new URL(request.url, `http://${request.headers.host}`).pathname
if (pathname === '/ws') {
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request)
})
}
})
server.httpServer.once('listening', () => {
const { port } = server.httpServer.address()
setTimeout(() => printServerInfo(port), 100)
})
}
}
}