itender/src/main.ts
Tobias Hopp c81713cd23 update
Took 15 hours 7 minutes
2022-11-17 00:46:19 +01:00

182 lines
4.6 KiB
TypeScript

import {App} from "./App";
import debug from "debug";
import {WebsocketApp} from "./WebsocketApp";
import {Database} from "./database/Database";
import Ingredient from "./database/Ingredient";
import {iTender} from "./iTender";
import {iTenderStatus} from "./iTenderStatus";
import {Utils} from "./Utils";
import Container from "./database/Container";
import {Settings} from "./Settings";
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!");
}
function checkStart() {
setTimeout(async () => {
if (!Settings.setupDone) {
checkStart();
return;
}
Settings.saveSettings();
await init();
setInterval(refresh, 1000 * 60 * 10);
iTender.setStatus(iTenderStatus.READY);
}, 1000);
}
checkStart();
} catch (e) {
console.error("---- ERROR ----");
console.error(e);
process.exit(-1);
}
})();
function init(): Promise<void> {
log("Initializing...");
return new Promise(async resolve => {
iTender.setStatus(iTenderStatus.STARTING);
// Network
await iTender.checkNetwork();
if (iTender.internetConnection) {
await iTender.refreshFromServer();
}
// Containers
await iTender.refreshContainers();
// Drinks
await iTender.refreshDrinks();
// Start auto checkup for stuck jobs
await iTender.autoCheckup();
resolve();
});
}
function refresh(): Promise<void> {
return new Promise(async resolve => {
// 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?
});
}
async function test() {
console.log("Testing fn");
/*
let cola = new Ingredient();
cola.name = "Cola";
cola.category = Category.SOFTDRINK;
await cola.save();
let sprite = new Ingredient();
sprite.name = "Sprite";
sprite.category = Category.SOFTDRINK;
await sprite.save();
let fanta = new Ingredient();
fanta.name = "Fanta";
fanta.category = Category.SOFTDRINK;
await fanta.save();
let drink = new Drink();
drink.name = "Fanta";
drink.category = Category.ALCOHOL_FREE;
drink.ingredients = [{type: fanta, amount: 200}];
await drink.save();
drink = new Drink();
drink.name = "Mezzo Mix";
drink.category = Category.ALCOHOL_FREE;
drink.ingredients = [{type: fanta, amount: 100}, {type: cola, amount: 100}];
await drink.save();*/
let ingredient = await Ingredient.findOne({name: "Fanta"});
if (!ingredient)
return;
/*let drink = new Drink();
drink.name = "Cola";
drink.ingredients = [{type: ingredient, amount: 200}];
await drink.save();*/
/* let drink = await Drink.findOne({name: "Cola"}).populate("ingredients.type");
if (!drink) return;
console.log(drink);*/
/*let container = new Container();
container.slot = 2;
container.volume = 750;
container.sensorEcho = 28;
container.sensorTrigger = 29;
container.content = ingredient;
container.sensorFilledMax = 2;
container.sensorFilledMin = 15;*/
//await container.save();
/* let container = await Container.findOne({slot: 1});
if (!container) return;
console.log(container);*/
//console.log(drink.ingredients)
/*let ingredient = new Ingredient();
ingredient.name = "Cola";
ingredient.category = Category.ALCOHOL_FREE;
await ingredient.save();
let ingredient2 = new Ingredient();
ingredient2.name = "Fanta";
ingredient2.category = Category.ALCOHOL_FREE;
await ingredient2.save();
let drink = new Drink();
drink.name = "Mezzo Mix";
drink.ingredients = [ {type: ingredient2, amount: 2}, { type: ingredient, amount: 10 } ];
await drink.save();*/
}