diff --git a/.gitignore b/.gitignore index 0dc7b4b..a1bead5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/.vscode \ No newline at end of file +/.vscode +build \ No newline at end of file diff --git a/ap_case/apcase.3mf b/ap_case/apcase.3mf new file mode 100644 index 0000000..d74a1fb Binary files /dev/null and b/ap_case/apcase.3mf differ diff --git a/ap_case/apcase.FCStd b/ap_case/apcase.FCStd new file mode 100644 index 0000000..364b6ad Binary files /dev/null and b/ap_case/apcase.FCStd differ diff --git a/recever.py b/recever.py index 41f2ed9..cd11a68 100644 --- a/recever.py +++ b/recever.py @@ -9,11 +9,7 @@ BOAT_STATE_INCTRL = 1 BOAT_STATE_AVAILABLE = 0 BOAT_STATE_LOCKED = -1 -boats = [ - { "id": 0, "name": "test boat", "state": BOAT_STATE_AVAILABLE }, - { "id": 1, "name": "varent object", "state": BOAT_STATE_AVAILABLE } -] - +boats = [] clients = [] def onCMD(data): @@ -61,6 +57,47 @@ async def echoClients(client): data += str(client['id']) + ";" + str(client['boat']) + ";" + str(client['state']) + ":" await client['ws'].send(data + '\n') +async def takeControll(client, boat): + global boats + if (client['boat'] is not None): + boat["state"] = BOAT_STATE_AVAILABLE + client["boat"] = None + for b in boats: + if (b['id'] == int(boat)): + if (boat['state'] == BOAT_STATE_AVAILABLE): + boat["state"] = BOAT_STATE_INCTRL + print("take controll: " + str(client["id"]) + " -> " + boat["name"]) + client["boat"] = b + return + else: + print("WARN: takeControll: " + boat["name"] + " not available (" + str(client["id"]) + ")") + break + +async def freeBoat(boat): + global boats, clients + for client in clients: + if (client["boat"]['id'] == boat): + client["boat"] = None + break + for b in boats: + if (b['id'] == int(boat)): + if (boat['state'] == BOAT_STATE_INCTRL): + boat["state"] = BOAT_STATE_AVAILABLE + break + +async def lockBoat(boat): + global boats, clients + for client in clients: + if (client["boat"]['id'] == boat): + client["boat"] = None + break + for b in boats: + if (b['id'] == int(boat)): + boat["state"] = BOAT_STATE_LOCKED + break + + + async def onMessage(message, client): global boats data = message.replace('\n', '').split(';') @@ -70,13 +107,15 @@ async def onMessage(message, client): if (data[1] == "boats"): await echoBoats(client) elif(data[1] == "ctrl"): - print("controll") + takeControll(client, data[2]) elif(data[1] == "end"): - print("end") + takeControll(client, -1) elif(data[1] == "free"): - print("free") + if (client["id"] == adminId): + freeBoat(data[2]) elif(data[1] == "lock"): - print("lock") + if (client["id"] == adminId): + lockBoat(data[2]) elif(data[1] == "locked"): await echoLockedBoats(client) elif(data[1] == "kick"): @@ -84,9 +123,12 @@ async def onMessage(message, client): elif(data[1] == "clients"): await echoClients(client) elif(data[1] == "d"): - print("controll cmd (" + client['id'] + "): " + data[2]) + if (client['boat'] is None): + print("WARN: controll cmd (" + client['id'] + ") to None: " + data[2]) + else: + print("INFO: controll cmd (" + client['id'] + ") to " + client['boat']['name'] + ": " + data[2]) else: - print("something else: '" + data[1] + "'") + print("WARN: invalid command (" + client['id'] + "): '" + data[1] + "'") async def newClient(clientId, ws): client = { "id": clientId, "boat": None, "ws": ws, "state": "active" } @@ -115,11 +157,11 @@ async def run(ws, path): async for message in ws: message = message.split(';') if (len(message) == 3 and message[1] == "4675"): - client = await newClient(message[1], ws) + client = await newClient(message[0], ws) if (client is not None): break elif (len(message) == 3 and message[1] == "3440"): - client = await newBoat(message[1], message[2], ws) + client = await newBoat(message[0], message[2], ws) if (client is not None): break