add boat state terminated
This commit is contained in:
parent
33cee85edb
commit
6d22572a75
@ -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):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user