diff options
Diffstat (limited to 'site/obu.hamlet')
| -rw-r--r-- | site/obu.hamlet | 132 | 
1 files changed, 0 insertions, 132 deletions
diff --git a/site/obu.hamlet b/site/obu.hamlet deleted file mode 100644 index ed8017a..0000000 --- a/site/obu.hamlet +++ /dev/null @@ -1,132 +0,0 @@ -<h1>_{MsgOBU} - -<section> -  <h2>#{ticketTripName} _{Msgon} #{ticketDay} -  <strong>Token:</strong> <span id="token"> - -<section> -  <h2>_{MsgLive} -  <p><strong>Position: </strong><span id="lat"></span>, <span id="long"></span> -  <p><strong>Accuracy: </strong><span id="acc"> - -<section> -  <h2>_{MsgEstimated} -  <p><strong>_{MsgDelay}</strong>: <span id="delay"> -  <p><strong>_{MsgSequence}</strong>: <span id="sequence"> - -<section> -  <h2>Status -  <p id="status">_{MsgNone} -  <p id>_{MsgError}: <span id="error"> - - -<script> -  var token = null; - -  let euclid = (a,b) => { -    let x = a[0]-b[0]; -    let y = a[1]-b[1]; -    return x*x+y*y; -  } - -  let minimalDist = (point, list, proj, norm) => { -    return list.reduce ( -      (min, x) => { -        let dist = norm(point, proj(x)); -        return dist < min[0] ? [dist,x] : min -      }, -      [norm(point, proj(list[0])), list[0]] -    )[1] -  } - -  let counter = 0; -  let ws; -  let id; - -  async function geoError(error) { -    document.getElementById("status").innerText = "error"; -    alert(`_{MsgPermissionFailed}: \n${error.message}`); -    console.log(error); -  } - -  async function wsError(error) { -    // alert(`_{MsgWebsocketError}: \n${error.message === undefined ? error.reason : error.message}`); -    console.log(error); -    navigator.geolocation.clearWatch(id); -  } - -  async function wsClose(error) { -    console.log(error); -    document.getElementById("error").innerText = `websocket closed (reason: ${error.reason}). reconnecting …`; -    navigator.geolocation.clearWatch(id); -    setTimeout(openWebsocket, 1000); -  } - -  function wsMsg(msg) { -    let json = JSON.parse(msg.data); -    console.log(json); -    document.getElementById("delay").innerText = -      `${json.delay}s (${Math.floor(json.delay / 60)}min)`; -    document.getElementById("sequence").innerText = json.sequence; -  } - - -  function initGeopos() { -    document.getElementById("error").innerText = ""; -    id = navigator.geolocation.watchPosition( -      geoPing, -      geoError, -      {enableHighAccuracy: true} -    ); -  } - - -  function openWebsocket () { -    ws = new WebSocket((location.protocol == "http:" ? "ws" : "wss") + "://" + location.host + "/api/train/ping/ws"); -    ws.onerror = wsError; -    ws.onclose = wsClose; -    ws.onmessage = wsMsg -    ws.onopen = (event) => initGeopos(); -  } - -  async function geoPing(geoloc) { -    console.log("got position update " + counter); -    document.getElementById("lat").innerText = geoloc.coords.latitude; -    document.getElementById("long").innerText = geoloc.coords.longitude; -    document.getElementById("acc").innerText = geoloc.coords.accuracy; - -    ws.send(JSON.stringify({ -        token: token, -        lat: geoloc.coords.latitude, -        long: geoloc.coords.longitude, -        timestamp: (new Date()).toISOString() -    })); -    counter += 1; -    document.getElementById("status").innerText = `sent ${counter} pings`; -  } - - -  async function main() { -    let trip = await (await fetch("/api/trip/#{ticketTripName}")).json(); -    console.log("got trip info"); - -    token = await (await fetch("/api/train/register/#{UUID.toText ticketId}", { -      method: "POST", -      body: JSON.stringify({agent: "onboard-unit"}), -      headers: {"Content-Type": "application/json"} -    })).json(); - - -    if (token.error) { -      alert("could not obtain token: \n" + token.msg); -      document.getElementById("status").innerText = "_{MsgTokenFailed}"; -    } else { -      console.log("got token"); - -      document.getElementById("token").innerText = token; - -      openWebsocket(); -    } -  } - -  main()  | 
