add timeout

This commit is contained in:
Sem van der Hoeven
2023-06-08 12:36:59 +02:00
parent a7c22aa362
commit ba0fdc7863
2 changed files with 16 additions and 10 deletions

View File

@@ -76,9 +76,9 @@
<script> <script>
var ws; var ws;
var api_timout;
var checked_for_connection = false; var checked_for_connection = false;
var connected_to_api = false; var connected_to_api = false;
// setInterval(check_ws_connection, 1000, ws);
assign_button_callbacks(); assign_button_callbacks();
openSocket = () => { openSocket = () => {
@@ -317,22 +317,23 @@
document.getElementById("failsafe").style.color = "white"; document.getElementById("failsafe").style.color = "white";
document.getElementById("failsafe").style.textDecoration = "bold"; document.getElementById("failsafe").style.textDecoration = "bold";
alert("Failsafe enabled! Drone is landing. The failsafe message is:\n" + data.message); alert("Failsafe enabled! Drone is landing. The failsafe message is:\n" + data.message);
} else if (data.type == "API_HEARTBEAT") {
clearTimeout(api_timout);
} else { } else {
// decodeBase64Image(data.image, document.getElementById("result-video")); // decodeBase64Image(data.image, document.getElementById("result-video"));
} }
} }
function check_ws_connection() { function check_ws_connection() {
if (checked_for_connection == false && connected_to_api) if (checked_for_connection == false && connected_to_api) {
{
console.log("Checking connection to API") console.log("Checking connection to API")
console.log(ws.readyState) ws.send(JSON.stringify({ "command": 7 }));
if (ws.readyState != WebSocket.OPEN) { api_timout = setTimeout(function () {
alert("Lost connection to API!") alert("API did not respond on time!")
document.getElementById("connectedlabel").innerHTML = "Not connected to drone"; document.getElementById("connectedlabel").innerHTML = "Not connected to drone";
document.getElementById("connectbutton").disabled = false; document.getElementById("connectbutton").disabled = false;
checked_for_connection = true; }, 1000);
}
} }
} }
@@ -345,7 +346,7 @@
document.getElementById("connectedlabel").innerHTML = "Connected to drone"; document.getElementById("connectedlabel").innerHTML = "Connected to drone";
document.getElementById("connectbutton").disabled = true; document.getElementById("connectbutton").disabled = true;
connected_to_api = true; connected_to_api = true;
setInterval(check_ws_connection, 1000); setInterval(check_ws_connection, 2000);
openSocket(); openSocket();
}); });

View File

@@ -42,6 +42,7 @@ class RequestCommand(Enum):
MOVE_DIRECTION = 3 MOVE_DIRECTION = 3
TAKE_PICTURE = 5 TAKE_PICTURE = 5
EMERGENCY_STOP = 6 EMERGENCY_STOP = 6
API_HEARTBEAT = 7
class ResponseMessage(Enum): class ResponseMessage(Enum):
@@ -53,6 +54,7 @@ class ResponseMessage(Enum):
IMAGE = 1 IMAGE = 1
MOVE_DIRECTION_RESULT = 2 MOVE_DIRECTION_RESULT = 2
FAILSAFE = 3 FAILSAFE = 3
API_HEARTBEAT = 4
class ApiListener(Node): class ApiListener(Node):
@@ -442,6 +444,9 @@ class ApiListener(Node):
elif message_json['command'] == RequestCommand.EMERGENCY_STOP.value: elif message_json['command'] == RequestCommand.EMERGENCY_STOP.value:
self.get_logger().info('Emergency stop command received') self.get_logger().info('Emergency stop command received')
self.emergency_stop() self.emergency_stop()
elif message_json['command'] == RequestCommand.API_HEARTBEAT.value:
self.get_logger().info('API heartbeat received')
self.message_queue.append(json.dumps({"type": ResponseMessage.API_HEARTBEAT.name}))
else: else:
self.get_logger().error('Received unknown command ' + self.get_logger().error('Received unknown command ' +
str(message_json['command'])) str(message_json['command']))