aboutsummaryrefslogtreecommitdiff
path: root/site/tracker.hamlet
diff options
context:
space:
mode:
Diffstat (limited to 'site/tracker.hamlet')
-rw-r--r--site/tracker.hamlet147
1 files changed, 0 insertions, 147 deletions
diff --git a/site/tracker.hamlet b/site/tracker.hamlet
deleted file mode 100644
index 2cc05e4..0000000
--- a/site/tracker.hamlet
+++ /dev/null
@@ -1,147 +0,0 @@
-<h1>_{MsgOBU}
-
-<section>
- <h2>Tracker
- <strong>Token:</strong> <span id="token">
-<section>
- <h2>Status
- <p id="status">_{MsgNone}
- <p id>_{MsgError}: <span id="error">
-<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">
-
-
-<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;
-
- function setStatus(msg) {
- document.getElementById("status").innerText = msg
- }
-
- async function geoError(error) {
- setStatus("error");
- alert(`_{MsgPermissionFailed}: \n${error.message}`);
- console.error(error);
- main();
- }
-
- 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/tracker/ping/ws");
- ws.onerror = wsError;
- ws.onclose = wsClose;
- ws.onmessage = wsMsg;
- ws.onopen = (event) => {
- setStatus("connected");
- };
- }
-
- 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;
-
- if (ws !== undefined && ws.readyState == 1) {
- ws.send(JSON.stringify({
- token: token,
- geopos: [ geoloc.coords.latitude, geoloc.coords.longitude ],
- timestamp: (new Date()).toISOString()
- }));
- counter += 1;
- setStatus(`sent ${counter} pings`);
- } else {
- setStatus(`websocket readystate ${ws.readyState}`);
- }
- }
-
-
- async function main() {
- initGeopos();
-
- let urlparams = new URLSearchParams(window.location.search);
-
- token = urlparams.get("token");
-
- if (token === null) {
- token = await (await fetch("/api/tracker/register/", {
- method: "POST",
- body: JSON.stringify({agent: "tracktrain-website"}),
- headers: {"Content-Type": "application/json"}
- })).json();
-
- if (token.error) {
- alert("could not obtain token: \n" + token.msg);
- setStatus("_{MsgTokenFailed}");
- } else {
- console.log("got token");
- window.location.search = `?token=${token}`;
- }
- }
-
- console.log(token)
-
- if (token !== null) {
- document.getElementById("token").innerText = token;
- openWebsocket();
- }
- }
-
- main()