From 06cc198fdaae696c52eed4994a95928053321692 Mon Sep 17 00:00:00 2001 From: DeveloperAmrit Date: Sun, 8 Feb 2026 09:06:11 +0530 Subject: [PATCH 1/2] Improve LAN IP Detection and User Selection for WebSocket Server --- src/routes/settings.tsx | 29 ++++++++++++++++++++++++++--- src/server/websocket.ts | 22 ++++++++++++++-------- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/routes/settings.tsx b/src/routes/settings.tsx index 8c50c5d..4c36e04 100644 --- a/src/routes/settings.tsx +++ b/src/routes/settings.tsx @@ -9,6 +9,7 @@ export const Route = createFileRoute('/settings')({ function SettingsPage() { const [ip, setIp] = useState(''); + const [availableIps, setAvailableIps] = useState([]); const [frontendPort, setFrontendPort] = useState(String(CONFIG.FRONTEND_PORT)); const [invertScroll, setInvertScroll] = useState(CONFIG.MOUSE_INVERT); const [qrData, setQrData] = useState(''); @@ -60,9 +61,15 @@ function SettingsPage() { const data = JSON.parse(event.data); if (data.type === 'server-ip' && data.ip) { console.log('Auto-detected IP:', data.ip); - setIp(data.ip); - console.log('Auto-detected IP:', data.ip); - setIp(data.ip); + + // Only override if user hasn't set one, or if it's default + if (!localStorage.getItem('rein_ip')) { + setIp(data.ip); + } + + if (data.ips && Array.isArray(data.ips)) { + setAvailableIps(data.ips); + } socket.close(); } } catch (e) { @@ -96,6 +103,22 @@ function SettingsPage() { value={ip} onChange={(e) => setIp(e.target.value)} /> + {availableIps.length > 0 && ( +
+ Detected LAN IPs: +
+ {availableIps.map(addr => ( + + ))} +
+
+ )} diff --git a/src/server/websocket.ts b/src/server/websocket.ts index f06ad7a..4f0c61b 100644 --- a/src/server/websocket.ts +++ b/src/server/websocket.ts @@ -5,26 +5,32 @@ import fs from 'fs'; import { Server, IncomingMessage } from 'http'; import { Socket } from 'net'; -// Helper to find LAN IP -function getLocalIp() { +// Helper to find LAN IPs +function getLocalIps() { const nets = os.networkInterfaces(); + const results: string[] = []; for (const name of Object.keys(nets)) { for (const net of nets[name]!) { if (net.family === 'IPv4' && !net.internal) { - return net.address; + results.push(net.address); } } } - return 'localhost'; + return results.length > 0 ? results : ['localhost']; } export function createWsServer(server: Server) { const wss = new WebSocketServer({ noServer: true }); const inputHandler = new InputHandler(); - const LAN_IP = getLocalIp(); + const LAN_IPS = getLocalIps(); + // Heuristic: Prefer 192.168.x.x, then 10.x.x.x, then first available + const BEST_IP = LAN_IPS.find(ip => ip.startsWith('192.168.')) + || LAN_IPS.find(ip => ip.startsWith('10.')) + || LAN_IPS[0]; console.log(`WebSocket Server initialized (Upgrade mode)`); - console.log(`WS LAN IP: ${LAN_IP}`); + console.log(`WS LAN IPS: ${LAN_IPS.join(', ')}`); + console.log(`Selected Best IP: ${BEST_IP}`); server.on('upgrade', (request: IncomingMessage, socket: Socket, head: Buffer) => { const pathname = request.url; @@ -39,7 +45,7 @@ export function createWsServer(server: Server) { wss.on('connection', (ws: WebSocket) => { console.log('Client connected to /ws'); - ws.send(JSON.stringify({ type: 'connected', serverIp: LAN_IP })); + ws.send(JSON.stringify({ type: 'connected', serverIp: BEST_IP, ips: LAN_IPS })); ws.on('message', async (data: string) => { try { @@ -47,7 +53,7 @@ export function createWsServer(server: Server) { const msg = JSON.parse(raw); if (msg.type === 'get-ip') { - ws.send(JSON.stringify({ type: 'server-ip', ip: LAN_IP })); + ws.send(JSON.stringify({ type: 'server-ip', ip: BEST_IP, ips: LAN_IPS })); return; } From 5de16829e60847c2ee19b08f7c2a17e87c212695 Mon Sep 17 00:00:00 2001 From: DeveloperAmrit Date: Sun, 8 Feb 2026 09:16:51 +0530 Subject: [PATCH 2/2] Coderabbit critical error fix --- src/routes/settings.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/settings.tsx b/src/routes/settings.tsx index 4c36e04..3f33023 100644 --- a/src/routes/settings.tsx +++ b/src/routes/settings.tsx @@ -63,7 +63,8 @@ function SettingsPage() { console.log('Auto-detected IP:', data.ip); // Only override if user hasn't set one, or if it's default - if (!localStorage.getItem('rein_ip')) { + const stored = localStorage.getItem('rein_ip'); + if (!stored || stored === 'localhost' || stored === '127.0.0.1' || stored === window.location.hostname) { setIp(data.ip); }