tabule nabídne všechny adresy, ne jednu
Detekce vracela jedinou adresu podle výchozí trasy. Když ta nevede tam, kam je připojený telefon, QR kód míří do prázdna a nezbývá než sahat do konfigurace. Při ladění se ukázalo i to, že záložní větev může vrátit 127.0.0.1, tedy QR kód na localhost. - net.py hledá adresy všech rozhraní přes if_nameindex a ioctl, se zálohou přes getaddrinfo; DICE_HOST má poslední slovo - řadí se podle rozsahu adresy a obecného typu rozhraní, ne podle seznamu konkrétních jmen: výchozí trasa, místní sítě, tailnet, virtuální sítě - loopback a link-local vypadnou, nic dalšího se nezahazuje — o tom, co funguje, rozhoduje člověk u stolu - tailnet adresu vědomě necháváme: funguje i napříč sítěmi - adresy se hledají při každém načtení; když se notebook přesune na jinou síť, tabule to pozná podle data-address a načte se znovu - když se nenajde nic, tabule řekne, co s tím, místo QR kódu naslepo - 20 testů nad klasifikací a řazením, nezávislých na aktuální síti - README doplněn o řešení potíží s připojením Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cd10db1a72
commit
5052a48611
10 files changed
+374
-35
No files matched your search
@@ -1,3 +1,5 @@
|
||||
{# data-address si hlídá tabule: když se notebook přesune na jinou síť,
|
||||
je v QR kódu stará adresa a stránka se sama načte znovu. #}
|
||||
<p class="eyebrow">Zápisník · hra {{ game_id }}</p>
|
||||
<h1>{% if winner %}Konec hry{% else %}Na tahu {{ current }}{% endif %}</h1>
|
||||
<p class="meta">do {{ game.final_score|cislo }} bodů · kolo {{ game.round_number }}</p>
|
||||
@@ -0,0 +1,22 @@
|
||||
{# Kudy se na počitadlo dostane telefon. Nabídneme víc cest, vybrat si může člověk. #}
|
||||
{% if primary %}
|
||||
<div class="join">
|
||||
{{ target|qr }}
|
||||
<div class="address">
|
||||
<span>Zapisuje se z telefonu</span>
|
||||
{{ target }}
|
||||
{% if others %}
|
||||
<ul class="alt">
|
||||
{% for address in others %}
|
||||
<li>{{ address.ip }}:{{ port }} <em>{{ address.label }}</em></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="join">
|
||||
<p class="address"><span>Adresu se nepodařilo zjistit</span>
|
||||
Spusť server s <code>DICE_HOST=<adresa></code>.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -1,3 +1,3 @@
|
||||
{# Fragment pro tabuli: obě části, které se během hry mění. #}
|
||||
<div id="head">{% include "_head.html" %}</div>
|
||||
<div id="head" data-address="{{ primary_ip }}">{% include "_head.html" %}</div>
|
||||
<div id="sheet">{% include "_sheet.html" %}</div>
|
||||
+10
-6
@@ -4,11 +4,8 @@
|
||||
{% block body %}
|
||||
<div class="board">
|
||||
<header class="masthead">
|
||||
<div id="head">{% include "_head.html" %}</div>
|
||||
<div class="join">
|
||||
{{ qr }}
|
||||
<p class="address"><span>Zapisuje se z telefonu</span>{{ address }}</p>
|
||||
</div>
|
||||
<div id="head" data-address="{{ primary_ip }}">{% include "_head.html" %}</div>
|
||||
{% include "_join.html" %}
|
||||
</header>
|
||||
|
||||
<div id="sheet">{% include "_sheet.html" %}</div>
|
||||
@@ -16,7 +13,6 @@
|
||||
|
||||
<script>
|
||||
// Tabule se doptává serveru; není co udržovat na klientovi.
|
||||
// QR kód a adresa se needitují, takže zůstávají mimo obnovovanou část.
|
||||
const url = "{{ url_for('board_panel', game_id=game_id) }}";
|
||||
|
||||
setInterval(async () => {
|
||||
@@ -25,6 +21,14 @@
|
||||
if (!response.ok) return;
|
||||
|
||||
const fresh = new DOMParser().parseFromString(await response.text(), "text/html");
|
||||
|
||||
// Notebook se přesunul na jinou síť — adresa v QR kódu už neplatí.
|
||||
const head = fresh.getElementById("head");
|
||||
if (head && head.dataset.address !== document.getElementById("head").dataset.address) {
|
||||
location.reload();
|
||||
return;
|
||||
}
|
||||
|
||||
for (const id of ["head", "sheet"]) {
|
||||
const updated = fresh.getElementById(id);
|
||||
if (updated) document.getElementById(id).replaceWith(updated);
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
<p class="eyebrow">Zápisník</p>
|
||||
<h1>Zatím se nehraje</h1>
|
||||
<p class="hint">Naskenuj kód telefonem a založ hru.</p>
|
||||
<div class="join">
|
||||
{{ qr }}
|
||||
<p class="address"><span>Adresa počitadla</span>{{ address }}</p>
|
||||
</div>
|
||||
{% include "_join.html" %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in new issue
Block a user