feat: modalità amichevole e fix URL remoti in dev (WSL2)

- Aggiunge modalità "Amichevole" in config: i set si vincono normalmente
  ma la partita non termina mai automaticamente (checkVittoriaPartita
  restituisce false), consentendo di giocare set illimitati
- Dev server ora espone su tutte le interfacce (vite --host)
- printServerInfo mostra Display + Controller per dispositivi remoti
- Su WSL2 getNetworkIPs() interroga PowerShell per ottenere gli IP
  Windows reali invece degli IP interni WSL (172.x)
This commit is contained in:
2026-06-20 15:42:57 +02:00
parent 38703116ff
commit 87ce0e26b8
4 changed files with 34 additions and 16 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
"version": "2.0.0", "version": "2.0.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite --host",
"build": "vite build", "build": "vite build",
"serve": "vite build && node server.js", "serve": "vite build && node server.js",
"test": "vitest", "test": "vitest",
+3 -1
View File
@@ -113,6 +113,8 @@
@click="configData.modalita = '2/3'">2/3</button> @click="configData.modalita = '2/3'">2/3</button>
<button :class="['btn', 'btn-mode', configData.modalita === '3/5' ? 'active' : '']" <button :class="['btn', 'btn-mode', configData.modalita === '3/5' ? 'active' : '']"
@click="configData.modalita = '3/5'">3/5</button> @click="configData.modalita = '3/5'">3/5</button>
<button :class="['btn', 'btn-mode', configData.modalita === 'amichevole' ? 'active' : '']"
@click="configData.modalita = 'amichevole'">Amichevole</button>
</div> </div>
</div> </div>
@@ -228,7 +230,7 @@ export default {
return null return null
}, },
isPartitaFinita() { isPartitaFinita() {
if (!this.setVintoTeam) return false if (!this.setVintoTeam || this.state.modalitaPartita === 'amichevole') return false
const setsToWin = this.state.modalitaPartita === '2/3' ? 2 : 3 const setsToWin = this.state.modalitaPartita === '2/3' ? 2 : 3
return this.set[this.setVintoTeam] + 1 >= setsToWin return this.set[this.setVintoTeam] + 1 >= setsToWin
}, },
+1
View File
@@ -46,6 +46,7 @@ export function checkVittoria(state) {
} }
export function checkVittoriaPartita(state) { export function checkVittoriaPartita(state) {
if (state.modalitaPartita === 'amichevole') return false
const setsToWin = state.modalitaPartita === "2/3" ? 2 : 3 const setsToWin = state.modalitaPartita === "2/3" ? 2 : 3
const sv = setVinti(state.sp.striscia) const sv = setVinti(state.sp.striscia)
return sv.home >= setsToWin || sv.guest >= setsToWin return sv.home >= setsToWin || sv.guest >= setsToWin
+29 -14
View File
@@ -1,20 +1,34 @@
import { networkInterfaces } from 'os' import { networkInterfaces } from 'os'
import { readFileSync, existsSync } from 'fs'
import { execSync } from 'child_process'
function isWSL() {
try {
return existsSync('/proc/sys/kernel/osrelease') &&
readFileSync('/proc/sys/kernel/osrelease', 'utf8').toLowerCase().includes('microsoft')
} catch { return false }
}
export function getNetworkIPs() { export function getNetworkIPs() {
const nets = networkInterfaces() if (isWSL()) {
const networkIPs = [] try {
const out = execSync(
for (const name of Object.keys(nets)) { 'powershell.exe -NoProfile -Command "Get-NetIPAddress -AddressFamily IPv4 | Select-Object -ExpandProperty IPAddress"',
for (const net of nets[name]) { { timeout: 3000 }
if (net.family === 'IPv4' && )
!net.internal && return out.toString().trim().split('\n')
!net.address.startsWith('172.17.') && .map(s => s.trim())
!net.address.startsWith('172.18.')) { .filter(ip => ip && !ip.startsWith('127.') && !ip.startsWith('169.254.') && !ip.startsWith('172.'))
networkIPs.push(net.address) } catch { return [] }
}
}
} }
const nets = networkInterfaces()
const networkIPs = []
for (const name of Object.keys(nets)) {
for (const net of nets[name]) {
if (net.family === 'IPv4' && !net.internal) networkIPs.push(net.address)
}
}
return networkIPs return networkIPs
} }
@@ -26,9 +40,10 @@ export function printServerInfo(port = 3000) {
console.log(` Controller: http://127.0.0.1:${port}/controller`) console.log(` Controller: http://127.0.0.1:${port}/controller`)
if (networkIPs.length > 0) { if (networkIPs.length > 0) {
console.log(`\n Controller da dispositivi remoti:`) console.log(`\n Da dispositivi remoti:`)
networkIPs.forEach(ip => { networkIPs.forEach(ip => {
console.log(` http://${ip}:${port}/controller`) console.log(` Display: http://${ip}:${port}/display`)
console.log(` Controller: http://${ip}:${port}/controller`)
}) })
} }