update recever and add ap case 3d files

This commit is contained in:
Laila van Reenen 2024-08-08 16:50:00 +02:00
parent cf175c9ffd
commit 92d9a448b0
Signed by: LailaTheElf
GPG Key ID: 1F4E6EE3E6DDF769
4 changed files with 57 additions and 14 deletions

3
.gitignore vendored
View File

@ -1 +1,2 @@
/.vscode /.vscode
build

BIN
ap_case/apcase.3mf Normal file

Binary file not shown.

BIN
ap_case/apcase.FCStd Normal file

Binary file not shown.

View File

@ -9,11 +9,7 @@ BOAT_STATE_INCTRL = 1
BOAT_STATE_AVAILABLE = 0 BOAT_STATE_AVAILABLE = 0
BOAT_STATE_LOCKED = -1 BOAT_STATE_LOCKED = -1
boats = [ boats = []
{ "id": 0, "name": "test boat", "state": BOAT_STATE_AVAILABLE },
{ "id": 1, "name": "varent object", "state": BOAT_STATE_AVAILABLE }
]
clients = [] clients = []
def onCMD(data): def onCMD(data):
@ -61,6 +57,47 @@ async def echoClients(client):
data += str(client['id']) + ";" + str(client['boat']) + ";" + str(client['state']) + ":" data += str(client['id']) + ";" + str(client['boat']) + ";" + str(client['state']) + ":"
await client['ws'].send(data + '\n') 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): async def onMessage(message, client):
global boats global boats
data = message.replace('\n', '').split(';') data = message.replace('\n', '').split(';')
@ -70,13 +107,15 @@ async def onMessage(message, client):
if (data[1] == "boats"): if (data[1] == "boats"):
await echoBoats(client) await echoBoats(client)
elif(data[1] == "ctrl"): elif(data[1] == "ctrl"):
print("controll") takeControll(client, data[2])
elif(data[1] == "end"): elif(data[1] == "end"):
print("end") takeControll(client, -1)
elif(data[1] == "free"): elif(data[1] == "free"):
print("free") if (client["id"] == adminId):
freeBoat(data[2])
elif(data[1] == "lock"): elif(data[1] == "lock"):
print("lock") if (client["id"] == adminId):
lockBoat(data[2])
elif(data[1] == "locked"): elif(data[1] == "locked"):
await echoLockedBoats(client) await echoLockedBoats(client)
elif(data[1] == "kick"): elif(data[1] == "kick"):
@ -84,9 +123,12 @@ async def onMessage(message, client):
elif(data[1] == "clients"): elif(data[1] == "clients"):
await echoClients(client) await echoClients(client)
elif(data[1] == "d"): 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: else:
print("something else: '" + data[1] + "'") print("WARN: invalid command (" + client['id'] + "): '" + data[1] + "'")
async def newClient(clientId, ws): async def newClient(clientId, ws):
client = { "id": clientId, "boat": None, "ws": ws, "state": "active" } client = { "id": clientId, "boat": None, "ws": ws, "state": "active" }
@ -115,11 +157,11 @@ async def run(ws, path):
async for message in ws: async for message in ws:
message = message.split(';') message = message.split(';')
if (len(message) == 3 and message[1] == "4675"): 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): if (client is not None):
break break
elif (len(message) == 3 and message[1] == "3440"): 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): if (client is not None):
break break