100 lines
2.8 KiB
TypeScript
100 lines
2.8 KiB
TypeScript
import {App} from "./App";
|
|
import debug from "debug";
|
|
import {WebsocketApp} from "./WebsocketApp";
|
|
import {Database} from "./database/Database";
|
|
import {iTender} from "./iTender";
|
|
import {iTenderStatus} from "./iTenderStatus";
|
|
import {Utils} from "./Utils";
|
|
import {Settings} from "./Settings";
|
|
import Drink from "./database/Drink";
|
|
import {MyGPIO} from "./MyGPIO";
|
|
|
|
const log = debug("itender:server");
|
|
|
|
const app = new App();
|
|
const wsApp = new WebsocketApp();
|
|
|
|
|
|
(async () => {
|
|
try {
|
|
log("Starting...");
|
|
await Database.connect();
|
|
//await test();
|
|
await app.listen();
|
|
await wsApp.listen();
|
|
Settings.loadSettings();
|
|
|
|
iTender.setStatus(iTenderStatus.STARTING);
|
|
await Utils.sleep(2000);
|
|
|
|
if (!Settings.setupDone) {
|
|
iTender.setStatus(iTenderStatus.SETUP);
|
|
log("iTender is not set up yet!");
|
|
}
|
|
|
|
|
|
log("Waiting for ready status...");
|
|
await Utils.waitForReady();
|
|
|
|
Settings.saveSettings();
|
|
|
|
log("Check OK, starting...");
|
|
await init();
|
|
log("Init OK");
|
|
setInterval(refresh, 1000 * 60);
|
|
iTender.setStatus(iTenderStatus.READY);
|
|
|
|
} catch (e) {
|
|
console.error("---- ERROR ----");
|
|
console.error(e);
|
|
process.exit(-1);
|
|
}
|
|
})();
|
|
|
|
function init(): Promise<void> {
|
|
|
|
return new Promise(async resolve => {
|
|
log("Initializing...");
|
|
await MyGPIO.setupPins();
|
|
setTimeout(async () => {
|
|
// Network
|
|
await iTender.checkNetwork();
|
|
let drinkCount = await Drink.countDocuments({});
|
|
if (iTender.internetConnection && iTender.status == iTenderStatus.READY && drinkCount < 3) {
|
|
console.log("No drinks in the database. - Try to refresh from server...")
|
|
await iTender.refreshFromServer();
|
|
}
|
|
}, 1000 * 15);
|
|
log("1");
|
|
|
|
// Containers
|
|
//await iTender.refreshContainers();
|
|
await iTender.measureContainers();
|
|
log("2");
|
|
// Drinks
|
|
await iTender.refreshDrinks();
|
|
log("3");
|
|
// Start auto checkup for stuck jobs
|
|
await iTender.autoCheckup();
|
|
log("4");
|
|
resolve();
|
|
});
|
|
}
|
|
|
|
function refresh(): Promise<void> {
|
|
return new Promise(async resolve => {
|
|
log("Refreshing...")
|
|
// Network
|
|
await iTender.checkNetwork();
|
|
|
|
// Below are refreshments of containers / drinks
|
|
|
|
// If there is a current job, DO NOT REFRESH!
|
|
if (iTender.currentJob)
|
|
return;
|
|
|
|
//await iTender.refreshContainers(); Not needed because there is no change in containers?
|
|
await iTender.measureContainers();
|
|
//await iTender.refreshDrinks(); Not needed because there is no change in drinks?
|
|
});
|
|
} |