// State variables
var updateRemote = undefined; // defined iff remote server accessible
-var loggedIn = false; // true after swiping the cards
var timeToLogout = undefined; // defined during logout countdown
var logoutTimer;
var reloadTimer = undefined;
+var id_user; // ID of the user who is to be accounted for the next coffee
console.log("hello from flask");
//sendJSON("{\"type\":\"empty\"}");
document.getElementById(id).innerHTML = msg;
}
-function loadLocalStorage() {
+function replayOfflineQueue() {
if (localStorage) {
- if (localStorage.length) {
- var entries = [];
- for (var i = 0; i < localStorage.length; i++) {
- var value = localStorage.getItem(localStorage.key(i));
- try {
- var key = localStorage.key(i);
- var value = localStorage.getItem(key);
- entries.push({ key: key, value: value });
- } catch (err) {
- console.log("no json: " + value)
- }
- }
- localStorage.clear();
- entries.sort((entry1, entry2) => { return entry1.key > entry2.key;});
- for (var i = 0; i < entries.length; i++) {
- updateRemote(entries[i].value);
- }
+ let queue = JSON.parse(localStorage.getItem("offlineQueue")) || [];
+ if (Array.isArray(queue)) {
+ queue.forEach(function (entry) {
+ updateRemote(entry.data);
+ });
+ localStorage.removeItem("offlineQueue");
}
}
}
// call this function. This function updates the UI to match the state.
function updateUI()
{
- if (updateRemote === undefined) {
- update("remote", "<center>Server offline...</center>");
- document.getElementById("local").style.display = "block";
- loadRemote();
- } else {
- document.getElementById("local").style.display = "none";
-
- if (loggedIn) {
- document.getElementById("nextStep").innerHTML = "Now select a beverage on the coffee machineā¦";
+ try {
+ if (updateRemote === undefined) {
+ update("remote", "<center>Server offline...</center>");
+ document.getElementById("local").style.display = "block";
+ loadRemote();
} else {
- document.getElementById("nextStep").innerHTML = "Enjoy your " + flavorChosen + "!";
- }
+ document.getElementById("local").style.display = "none";
- if (timeToLogout !== undefined)
- document.getElementById("logout_button").innerHTML = '<br>logout<br>(' + timeToLogout + ' s)';
+ if (id_user !== undefined) {
+ document.getElementById("nextStep").innerHTML = "Now select a beverage on the coffee machineā¦";
+ } else {
+ document.getElementById("nextStep").innerHTML = "Enjoy your " + flavorChosen + "!";
+ }
+
+ if (timeToLogout !== undefined)
+ document.getElementById("logout_button").innerHTML = '<br>logout<br>(' + timeToLogout + ' s)';
+ }
+ }
+ catch (err) {
+ console.log("Error: ", err);
}
}
-var id_user;
-
function hiddenUpdateRemote(json) {
var msg = JSON.parse(json);
- //update("json", "json: " + JSON.stringify(msg))
-
switch(msg.type) {
case "empty":
- //update("json","");
break;
case "rfid":
- /*update("json",
- "uid: " + msg.uid + "<br>" +
- "card type: " + msg.card_type + "<br>" +
- "uid size: " + msg.size + " bytes<br>" +
- "sak: " + msg.sak
- );*/
login(msg.uid);
- id_user=msg.uid;
break;
case "keys":
- //update("json", "key: " + msg.key);
var flavor = getFlavor(msg.key);
if (flavor !== "") {
addCoffee(flavor);
if (this.status == 200) {
update("remote", this.responseText);
updateRemote = hiddenUpdateRemote;
- loadLocalStorage();
+ replayOfflineQueue();
updateUI();
clearTimeout(reloadTimer);
} else {
loadRemote();
function ajax(method, route, data, id) {
+ var now = Date.now();
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4) {
updateUI();
if (localStorage) {
- var now = Date.now();
var fuck = JSON.stringify({
type: "fuck",
method: method,
data: data,
id: id
});
- localStorage.setItem(now, fuck);
- console.log(now + ": " + fuck);
+ let queue = JSON.parse(localStorage.getItem("offlineQueue")) || [];
+ queue.push({ time: Date.now(), data: fuck });
+ try {
+ localStorage.setItem("offlineQueue", JSON.stringify(queue));
+ }
+ catch (err) {
+ console.log(err);
+ }
}
}
}
function login(id) {
ajax("POST", "login", id, "user");
- loggedIn = true;
+ id_user = id;
clearTimeout(logoutTimer);
timeToLogout = undefined;
}
function logout() {
sendReset();
ajax("GET", "logout", "", "user");
- loggedIn = false;
+ id_user = undefined;
timeToLogout = undefined;
}
flavor: flavor,
uid: id_user
});
- if (loggedIn) {
+ if (id_user) {
ajax("POST", "coffee/add", data, "user");
flavorChosen = flavor;
- loggedIn = false;
+ id_user = undefined;
countingTimeLogout(10); //mean 10 seconds
}
}