51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Test manuel du proxy-console, comme le ferait le navigateur (étape 9) :
|
|
pas de sous-protocole demandé, contrairement au test direct de nova-serialproxy."""
|
|
import sys
|
|
import time
|
|
|
|
import websocket
|
|
|
|
url = sys.argv[1]
|
|
commande = sys.argv[2] if len(sys.argv) > 2 else "echo bonjour-syllabus"
|
|
|
|
|
|
def lire(ws, duree=3):
|
|
fin = time.time() + duree
|
|
sortie = b""
|
|
while time.time() < fin:
|
|
ws.settimeout(max(0.2, fin - time.time()))
|
|
try:
|
|
morceau = ws.recv()
|
|
except websocket.WebSocketTimeoutException:
|
|
break
|
|
except websocket.WebSocketConnectionClosedException:
|
|
print("[connexion fermée par le serveur]")
|
|
break
|
|
if isinstance(morceau, str):
|
|
morceau = morceau.encode()
|
|
if not morceau:
|
|
break
|
|
sortie += morceau
|
|
return sortie
|
|
|
|
|
|
ws = websocket.create_connection(url, timeout=10)
|
|
|
|
print("=== lecture initiale ===")
|
|
sys.stdout.buffer.write(lire(ws, 3))
|
|
|
|
print("\n=== connexion : eleve ===")
|
|
ws.send_binary(b"eleve\r")
|
|
sys.stdout.buffer.write(lire(ws, 2))
|
|
|
|
print("\n=== mot de passe ===")
|
|
ws.send_binary(b"eleve\r")
|
|
sys.stdout.buffer.write(lire(ws, 2))
|
|
|
|
print(f"\n=== commande : {commande} ===")
|
|
ws.send_binary((commande + "\r").encode())
|
|
sys.stdout.buffer.write(lire(ws, 3))
|
|
|
|
ws.close()
|
|
print("\n=== fin ===")
|