Files
5g_drone_ROS2/api/index.js
Sem van der Hoeven a6226ef99a add API error handling
2023-05-30 10:36:50 +02:00

92 lines
2.1 KiB
JavaScript

var express = require("express");
var app = express();
const WebSocket = require("ws");
var last_status = {};
var last_image;
var received_picture = false;
var received_error = false;
app.use(express.static("public"));
app.use(express.json());
var ws;
var api_connected = false;
ws.on("open", function open() {
console.log("connected with websockets to API!");
api_connected = true;
});
ws.on("message", function message(message) {
var msg = JSON.parse(message);
if (msg.type == "STATUS") {
last_status = msg.data;
} else if (msg.type == "IMAGE") {
console.log("got picture");
console.log(msg.image);
last_image = msg.image;
received_picture = true;
}
// console.log("got type: " + msg.type);
// console.log("RECEIVED: " + msg.data);
});
ws.on("error", function error(err) {
console.error("error: " + err);
received_error = true;
});
// set the view engine to ejs
app.set("view engine", "ejs");
// use res.render to load up an ejs view file
// index page
app.get("/", function (req, res) {
res.render("index", { api_connected: api_connected });
});
app.get("/status", function (req, res) {
res.status(200).json(last_status);
});
app.get("/image", function (req, res) {
console.log("got picture request");
var request = JSON.stringify({
command: 5
});
console.log("sending picture request")
ws.send(request);
while (received_picture == false) { }
res.status(200).send(last_image);
});
app.post("/move", function (req, res) {
console.log("got move request");
var request = JSON.stringify({
command: 3,
up_down: req.body.up_down,
left_right: req.body.left_right,
forward_backward: req.body.forward_backward,
yaw: req.body.turn_left_right
});
ws.send(request);
});
app.get("/connect", function (req, res) {
console.log("got connect request");
ws = new WebSocket("ws://10.100.0.40:9001/");
while (api_connected == false && received_error == false) { }
if (api_connected) {
res.status(200).json({ connected: true });
} else {
res.status(400).json({ connected: false });
}
});
app.listen(8080);
console.log("Server is listening on port 8080");