gs: add log commands
This commit is contained in:
parent
a846058098
commit
27b3f114f0
@ -42,8 +42,7 @@
|
|||||||
const boatjesEl = document.getElementById('boatjes');
|
const boatjesEl = document.getElementById('boatjes');
|
||||||
const clientsEl = document.getElementById('clients');
|
const clientsEl = document.getElementById('clients');
|
||||||
|
|
||||||
// const serverURL = 'ws://10.254.0.1:8080/';
|
const serverURL = 'ws://10.254.0.1:8080/';
|
||||||
const serverURL = 'ws://localhost:8080/';
|
|
||||||
|
|
||||||
var conn = new WebSocket(serverURL, ['mbcRcRf']);
|
var conn = new WebSocket(serverURL, ['mbcRcRf']);
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from websockets.server import serve
|
from websockets.server import serve
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import json
|
||||||
|
|
||||||
ADMIN_ID = "1234"
|
ADMIN_ID = "1234"
|
||||||
BOAT_DATA_INTERVAL_MAX = 0.1 # seconds
|
BOAT_DATA_INTERVAL_MAX = 0.1 # seconds
|
||||||
@ -15,6 +16,10 @@ BOAT_STATE_TERMINATED = -1
|
|||||||
Boats = []
|
Boats = []
|
||||||
Clients = []
|
Clients = []
|
||||||
|
|
||||||
|
async def sendToBoat(boat, cmd):
|
||||||
|
client['boat']['log'].append({"t": datetime.timestamp(datetime.now()), "type": "tx", "msg": cmd})
|
||||||
|
await client['boat']['ws'].send(cmd)
|
||||||
|
|
||||||
async def echo_boats(client):
|
async def echo_boats(client):
|
||||||
"""echo list of all not locked boats to client"""
|
"""echo list of all not locked boats to client"""
|
||||||
data = "boats:"
|
data = "boats:"
|
||||||
@ -84,6 +89,24 @@ async def lock_boat(boat):
|
|||||||
boat["state"] = BOAT_STATE_LOCKED
|
boat["state"] = BOAT_STATE_LOCKED
|
||||||
break
|
break
|
||||||
|
|
||||||
|
async def getlog(client, data):
|
||||||
|
"""send boat log to client"""
|
||||||
|
for b in Boats:
|
||||||
|
if b['id'] == data[2]:
|
||||||
|
await client['ws'].send("log;" + b['id'] + ";" + json.dumps(b['log']))
|
||||||
|
return
|
||||||
|
|
||||||
|
async def sendcmd(data):
|
||||||
|
"""send command to boat"""
|
||||||
|
for b in Boats:
|
||||||
|
if b['id'] == data[2]:
|
||||||
|
del data[0]
|
||||||
|
del data[1]
|
||||||
|
data = ";".join(data)
|
||||||
|
await sendToBoat(b, data)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def on_message(message, client):
|
async def on_message(message, client):
|
||||||
@ -97,12 +120,10 @@ async def on_message(message, client):
|
|||||||
elif data[1] == "ctrl":
|
elif data[1] == "ctrl":
|
||||||
await take_controll(client, data[2])
|
await take_controll(client, data[2])
|
||||||
elif data[1] == "end":
|
elif data[1] == "end":
|
||||||
await take_controll(client, -1)
|
await take_controll(client, "noBoat")
|
||||||
elif data[1] == "free":
|
elif data[1] == "free" and client["id"] == ADMIN_ID:
|
||||||
if client["id"] == ADMIN_ID:
|
|
||||||
await free_boat(data[2])
|
await free_boat(data[2])
|
||||||
elif data[1] == "lock":
|
elif data[1] == "lock" and client["id"] == ADMIN_ID:
|
||||||
if client["id"] == ADMIN_ID:
|
|
||||||
await lock_boat(data[2])
|
await lock_boat(data[2])
|
||||||
elif data[1] == "locked":
|
elif data[1] == "locked":
|
||||||
await echo_locked_boats(client)
|
await echo_locked_boats(client)
|
||||||
@ -114,9 +135,13 @@ async def on_message(message, client):
|
|||||||
if client['boat'] is None:
|
if client['boat'] is None:
|
||||||
print("WARN: controll cmd (" + client['id'] + ") to None: " + data[2])
|
print("WARN: controll cmd (" + client['id'] + ") to None: " + data[2])
|
||||||
elif client['boat']['lastMsg'] + BOAT_DATA_INTERVAL_MAX < datetime.timestamp(datetime.now()):
|
elif client['boat']['lastMsg'] + BOAT_DATA_INTERVAL_MAX < datetime.timestamp(datetime.now()):
|
||||||
print("INFO: controll cmd (" + client['id'] + ") to " + client['boat']['name'] + ": " + data[2])
|
# print("INFO: controll cmd (" + client['id'] + ") to " + client['boat']['name'] + ": " + data[2])
|
||||||
await client['boat']['ws'].send("d:" + data[2] + "\n")
|
sendToBoat(client['boat'], "d:" + data[2] + "\n")
|
||||||
client['boat']['lastMsg'] = datetime.timestamp(datetime.now())
|
client['boat']['lastMsg'] = datetime.timestamp(datetime.now())
|
||||||
|
elif data[1] == "getlog" and client['id'] == ADMIN_ID:
|
||||||
|
await getlog(client, data)
|
||||||
|
elif data[1] == "sendcmd" and client['id'] == ADMIN_ID:
|
||||||
|
await sendcmd(data)
|
||||||
else:
|
else:
|
||||||
print("WARN: invalid command (" + client['id'] + "): '" + data[1] + "'")
|
print("WARN: invalid command (" + client['id'] + "): '" + data[1] + "'")
|
||||||
|
|
||||||
@ -136,7 +161,7 @@ async def new_client(clientId, ws):
|
|||||||
|
|
||||||
async def new_boat(boatId, name, ws):
|
async def new_boat(boatId, name, ws):
|
||||||
"""handler for every new boat connection"""
|
"""handler for every new boat connection"""
|
||||||
boat = { "id": boatId, "name": name, "ws": ws, "state": BOAT_STATE_AVAILABLE, "lastMsg": 0 }
|
boat = { "id": boatId, "name": name, "ws": ws, "state": BOAT_STATE_AVAILABLE, "lastMsg": 0, "log": [] }
|
||||||
print("new boat connected: " + boatId)
|
print("new boat connected: " + boatId)
|
||||||
for bo in Boats:
|
for bo in Boats:
|
||||||
if bo['id'] == boat['id']:
|
if bo['id'] == boat['id']:
|
||||||
@ -174,6 +199,11 @@ async def run(ws, path):
|
|||||||
if len(message) == 0:
|
if len(message) == 0:
|
||||||
continue
|
continue
|
||||||
print("boat" + client['id'] + " says '" + message + "'")
|
print("boat" + client['id'] + " says '" + message + "'")
|
||||||
|
client['log'].append({
|
||||||
|
"t": datetime.timestamp(datetime.now()),
|
||||||
|
"type": "rx",
|
||||||
|
"msg": message
|
||||||
|
})
|
||||||
break
|
break
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user