firmware-base/vendor/qitech/Winder/resources/WinderWebInterface/mock/MockServer.js
2026-01-28 16:42:43 +01:00

323 lines
7.2 KiB
JavaScript

const express = require("express");
const app = express();
const path = require('path');
require('express-ws')(app);
app.listen(80, () => {
console.log(`Server listening on Port 80`)
});
app.use(express.static(path.join(__dirname, 'public')));
let status;
let speed = 3;
const getRandomSpeed = () => {
return Math.floor(Math.random() * 30 + (speed * 3));
}
const wind = () => {
status = {
s: {//spool
r: getRandomSpeed(),//rpm
s: 0,//stall
a: true,//active
},
p: {//puller
r: getRandomSpeed(),
s: 0,
a: true,
},
f: {//ferrari
r: getRandomSpeed(),
s: 0,
a: true,
},
m: "winding",//mode
w: status.w + 1, // total windings
l: status.w + 1, // total length
e: null//error
};
}
const change = () => {
status = {
s: {//spool
r: 0,//rpm
s: 0,//stall
a: false,//active
},
p: {//puller
r: getRandomSpeed(),
s: 0,
a: true,
},
f: {//ferrari
r: 0,
s: 0,
a: true,
},
m: "changing",//mode
w: status.w + 1, // total windings
l: status.w + 1, // total length
e: null//error
};
}
const power = () => {
status = {
s: {//spool
r: 0,//rpm
s: 0,//stall
a: true,//active
},
p: {//puller
r: 0,
s: 0,
a: true,
},
f: {//ferrari
r: 0,
s: 0,
a: true,
},
m: "power",//mode
w: status.w, // total windings
l: status.w, // total length
e: null//error
};
}
const unwind = () => {
status = {
s: {//spool
r: 0,//rpm
s: 0,//stall
a: false,//active
},
p: {//puller
r: -getRandomSpeed(),
s: 0,
a: true,
},
f: {//ferrari
r: 0,
s: 0,
a: true,
},
m: "unwinding",//mode
w: 0, // total windings
l: 0, // total length
e: null//error
};
}
const standby = () => {
status = {
s: {//spool
r: 0,//rpm
s: 0,//stall
a: false,//active
},
p: {//puller
r: 0,
s: 0,
a: false,
},
f: {//ferrari
r: 0,
s: 0,
a: false,
},
m: "standby",//mode
w: 0, // total windings
l: 0, // total length
e: null//error
};
}
const pull = () => {
status = {
s: {//spool
r: 0,//rpm
s: 0,//stall
a: true,//active
},
p: {//puller
r: getRandomSpeed(),
s: 0,
a: true,
},
f: {//ferrari
r: 0,
s: 0,
a: true,
},
m: "pulling",//mode
w: 0, // total windings
l: 0, // total length
e: null//error
};
}
const config = {
wifi: {
ssid: "Mein Netzwerk",
password: "PeterPan",
ap_ssid: "Jarvis Winder",
ap_password: "",
friendly_name: "Jarvis Winder",
mdns_name: "winder",
ap_enabled: true,
},
ferrari_min: 65,
ferrari_max: 130,
software: {
spiffs: {
version: "Mock Beta",
build: "011021",
date: "01.10.2021"
},
firmware: {
version: "Mock Beta",
build: "011021",
date: "01.10.2021"
}
},
};
app.ws('/ws', function (ws, req) {
console.log("connection established");
const send = (event, data, delay = 0) => {
setTimeout(() => {
ws.send(JSON.stringify({ event, data }));
}, delay);
}
setInterval(() => {
switch (status.m) {
case "winding":
wind();
break;
case "unwinding":
unwind();
break;
case "power":
power();
break;
case "pulling":
pull();
break;
case "changing":
change();
break;
default:
standby();
break;
}
send("stats", status);
}, 1000);
ws.on('message', function incoming(message) {
console.log(`recieved: ${message}`);
const json = JSON.parse(message);
if (!json.event) {
console.log("JSON format error");
return;
}
switch (json.event) {
case "scan":
send(json.event, {
networks: [
{ rssi: -72, ssid: "My Network", secure: 1 },
{ rssi: -90, ssid: "Your Network", secure: 0 },
{ rssi: -5, ssid: "Our Network", secure: 2 },
{ rssi: -72, ssid: "Their Network", secure: 1 },
{ rssi: -110, ssid: "Hidden Network", secure: 3 }],
current: config.wifi.ssid
}, 1000);
break;
case "connect":
if (Math.random() < 0.5) {
send(json.event, "connected", 1000);
config.wifi.ssid = json.data.name;
break;
}
send(json.event, "failed", 1000)
break;
case "wind":
if (json.data.mpm != 0) {
status.m = "winding"
}
else {
status.m = "power";
}
break;
case "unwind":
if (json.data.mpm != 0) {
status.m = "unwinding"
}
else {
status.m = "power";
}
break;
case "power":
status.m = "power";
break;
case "standby":
status.m = "standby";
break;
case "pull":
status.m = "pulling";
break;
case "config":
send(json.event, config, 500);
break;
case "modify":
send(json.event, {});
break;
case "calibrate":
break;
case "speed":
speed = json.data.mpm;
break;
case "change":
status.m = "changing";
break;
default:
console.log("unknown event");
break;
}
});
});
// handle every other route with index.html, which will contain
// a script tag to your application's JavaScript file(s).
app.get('*', function (req, res) {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
standby();
// Add hosts entry and create por forwarding with
// netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=5000 connectaddress=127.0.0.1