From 6d22572a750adb279d93f5fa4ea11d304ede1cf1 Mon Sep 17 00:00:00 2001 From: FReenen Date: Sat, 10 Aug 2024 10:58:06 +0200 Subject: [PATCH] add boat state terminated --- ground-station.py | 62 +++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/ground-station.py b/ground-station.py index 3eb93f1..7a5142b 100644 --- a/ground-station.py +++ b/ground-station.py @@ -3,21 +3,21 @@ import asyncio from websockets.server import serve -adminId = "1234" +ADMIN_ID = "1234" -BOAT_STATE_INCTRL = 1 -BOAT_STATE_AVAILABLE = 0 -BOAT_STATE_LOCKED = -1 +BOAT_STATE_INCTRL = 2 +BOAT_STATE_AVAILABLE = 1 +BOAT_STATE_LOCKED = 0 +BOAT_STATE_TERMINATED = -1 -boats = [] -clients = [] +Boats = [] +Clients = [] async def echo_boats(client): """echo list of all not locked boats to client""" - global boats data = "boats:" - for boat in boats: - if boat['state'] != BOAT_STATE_LOCKED: + for boat in Boats: + if boat['state'] != BOAT_STATE_LOCKED and boat['state'] != BOAT_STATE_TERMINATED: data += str(boat['id']) + ";" + str(boat['name']) + ";" if boat["state"] == BOAT_STATE_AVAILABLE: data += 'available:' @@ -27,20 +27,19 @@ async def echo_boats(client): async def echo_locked_boats(client): """echo list of all locked boats to client""" - global boats - if client['id'] == adminId: + if client['id'] == ADMIN_ID: data = "lockedBoats:" - for boat in boats: + for boat in Boats: if boat['state'] == BOAT_STATE_LOCKED: data += str(boat['id']) + ";" + str(boat['name']) + ";locked:" await client['ws'].send(data + '\n') async def echo_clients(client): """echo list of all clients to client""" - if client['id'] == adminId: + if client['id'] == ADMIN_ID: data = "clients:" - for client in clients: - data += str(client['id']) + ";" + str(client['boat']) + ";" + str(client['state']) + ":" + for clie in Clients: + data += str(clie['id']) + ";" + str(clie['boat']) + ";" + str(clie['state']) + ":" await client['ws'].send(data + '\n') async def take_controll(client, boat): @@ -48,8 +47,8 @@ async def take_controll(client, boat): if client['boat'] is not None: client['boat']["state"] = BOAT_STATE_AVAILABLE client["boat"] = None - for b in boats: - if b['id'] == boat: + for b in Boats: + if b['id'] == boat and b['state'] != BOAT_STATE_TERMINATED: if b['state'] == BOAT_STATE_AVAILABLE: b["state"] = BOAT_STATE_INCTRL print("take controll: " + str(client["id"]) + " -> " + b["name"]) @@ -62,24 +61,24 @@ async def take_controll(client, boat): async def free_boat(boat): """make boat available for next client""" - for client in clients: + for client in Clients: if client["boat"]['id'] == boat: client["boat"] = None break - for b in boats: - if b['id'] == boat: + for b in Boats: + if b['id'] == boat and b['state'] != BOAT_STATE_TERMINATED: if boat['state'] == BOAT_STATE_INCTRL: boat["state"] = BOAT_STATE_AVAILABLE break async def lock_boat(boat): """lock a boat so client can't take controll over it""" - for client in clients: + for client in Clients: if client["boat"]['id'] == boat: client["boat"] = None break - for b in boats: - if b['id'] == int(boat): + for b in Boats: + if b['id'] == boat and b['state'] != BOAT_STATE_TERMINATED: boat["state"] = BOAT_STATE_LOCKED break @@ -98,10 +97,10 @@ async def on_message(message, client): elif data[1] == "end": await take_controll(client, -1) elif data[1] == "free": - if client["id"] == adminId: + if client["id"] == ADMIN_ID: await free_boat(data[2]) elif data[1] == "lock": - if client["id"] == adminId: + if client["id"] == ADMIN_ID: await lock_boat(data[2]) elif data[1] == "locked": await echo_locked_boats(client) @@ -122,11 +121,11 @@ async def new_client(clientId, ws): """handler for every new client connection""" client = { "id": clientId, "boat": None, "ws": ws, "state": "active" } print("new client connected: " + client['id']) - for clie in clients: + for clie in Clients: if clie['id'] == client['id']: clie['state'] = 'terminated' - clients.append(client) - if client['id'] == adminId: + Clients.append(client) + if client['id'] == ADMIN_ID: await echo_boats(client) await echo_locked_boats(client) await echo_clients(client) @@ -136,10 +135,11 @@ async def new_boat(boatId, name, ws): """handler for every new boat connection""" boat = { "id": boatId, "name": name, "ws": ws, "state": BOAT_STATE_AVAILABLE } print("new boat connected: " + boatId) - for bo in boats: + for bo in Boats: if bo['id'] == boat['id']: - bo['state'] = 'terminated' - boats.append(boat) + bo['state'] = BOAT_STATE_TERMINATED + await bo['ws'].close() + Boats.append(boat) return boat async def run(ws, path):