'use strict'; import {Component, h, html, render, useEffect, useState, useRef} from './preact.min.js'; const Message = m => html` ${m.message.data} `; const App = function(props) { const [cfg, setCfg] = useState({tcp: {}, ws: {}, mqtt: {}}); const [messages, setMessages] = useState([]); const [connected, setConnected] = useState(false); const [txt, setTxt] = useState(''); const [ws, setWs] = useState(null); const [rx, setRx] = useState(''); const [tx, setTx] = useState(''); const [baud, setBaud] = useState(''); const [tcpport, setTcpport] = useState(4001); const [wsport, setWsport] = useState(4002); const [mqtt, setMqtt] = useState(''); // const tcp_port = cfg.tcp.split(':')[2] || 4001; // const ws_port = cfg.ws.split(':')[2] || 4002; const refresh = () => fetch('/api/config/get').then(r => r.json()).then(r => { setTx(r.tx), setRx(r.rx), setBaud(r.baud), setCfg(r); setTcpport(r.tcp.url.split(':')[2] || 4001); setWsport(r.ws.url.split(':')[2] || 4002); setMqtt(r.mqtt.url); }); const watchWebsocket = function() { // Connect to websocker port, to implement WS console var reconnect = function() { var port; setWsport(x => port = x); var l = window.location, proto = l.protocol.replace('http', 'ws'); var tid, url = `${proto}//${l.hostname}:${port}/ws`; // console.log(url); var ws = new WebSocket(url); ws.onopen = () => { setConnected(true); setWs(ws); }; ws.onmessage = ev => { // console.log(ev, ev.data); setMessages(x => x.concat([{data: ev.data, uart: true}])); }; ws.onclose = function() { clearTimeout(tid); tid = setTimeout(reconnect, 1000); setConnected(false); setWs(null); }; }; reconnect(); }; useEffect(() => { refresh(); watchWebsocket(); }, []); const sendmessage = ev => { setMessages(x => x.concat([{data: txt + '\n', uart: false}])); if (ws) ws.send(txt + '\n'); setTxt(''); }; const onchange = ev => false; return html`
${JSON.stringify(cfg, null, 2)}
${messages.map(message => h(Message, {message}))}