67 lines
2.2 KiB
JavaScript
Executable File
67 lines
2.2 KiB
JavaScript
Executable File
(function(){
|
|
const logEl = document.getElementById('log');
|
|
const connEl = document.getElementById('conn');
|
|
|
|
function append(line){
|
|
const now = new Date().toISOString();
|
|
logEl.value += `[${now}] ${line}
|
|
`;
|
|
logEl.scrollTop = logEl.scrollHeight;
|
|
}
|
|
|
|
async function refreshStatus(){
|
|
try{
|
|
const res = await fetch('/api/status');
|
|
const st = await res.json();
|
|
if (st.connected){ connEl.textContent = 'verbunden'; connEl.className = 'badge ok'; }
|
|
else if (st.lastError){ connEl.textContent = 'fehler'; connEl.className = 'badge err'; }
|
|
else { connEl.textContent = 'getrennt'; connEl.className = 'badge warn'; }
|
|
}catch(e){ connEl.textContent = 'unbekannt'; connEl.className = 'badge'; }
|
|
}
|
|
|
|
function connectSSE(){
|
|
const es = new EventSource('/api/events');
|
|
es.onmessage = (ev)=>{
|
|
try{
|
|
const p = JSON.parse(ev.data);
|
|
if (p.level === 'msg') append(`WSS → ${p.data?.text ?? ''}`);
|
|
else if (p.level === 'tx') append(`TX → ${JSON.stringify(p.data)}`);
|
|
else append(`${p.level?.toUpperCase?.()}: ${p.message}`);
|
|
}catch{ append(ev.data); }
|
|
};
|
|
es.onerror = ()=>{
|
|
append('SSE Fehler/unterbrochen. Versuche neu zu verbinden…');
|
|
setTimeout(connectSSE, 2000);
|
|
};
|
|
}
|
|
|
|
function bindButtons(){
|
|
document.querySelectorAll('button[data-cmd]').forEach(btn =>{
|
|
btn.addEventListener('click', async () =>{
|
|
const cmd = btn.getAttribute('data-cmd');
|
|
|
|
let payload = null;
|
|
const payloadSelector = btn.getAttribute('data-payload');
|
|
if (payloadSelector) {
|
|
const field = document.querySelector(payloadSelector);
|
|
if (field) payload = field.value;
|
|
}
|
|
|
|
try{
|
|
const res = await fetch('/api/send', {
|
|
method:'POST', headers:{ 'Content-Type':'application/json' },
|
|
body: JSON.stringify({ cmd, payload })
|
|
});
|
|
const data = await res.json();
|
|
if(!res.ok){ append(`FEHLER ${res.status}: ${data.error || 'Unbekannt'}`); }
|
|
else { append(`Sende: ${cmd}`); }
|
|
}catch(err){ append('FEHLER: ' + (err?.message || err)); }
|
|
});
|
|
});
|
|
}
|
|
|
|
bindButtons();
|
|
connectSSE();
|
|
refreshStatus();
|
|
})();
|