WIP snapshot.
This commit is contained in:
parent
be2b3ec1e8
commit
18e283bb84
92
veilid-python/chat.py
Executable file
92
veilid-python/chat.py
Executable file
@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import veilid
|
||||||
|
|
||||||
|
QUIT = b"QUIT"
|
||||||
|
|
||||||
|
|
||||||
|
async def cb(*args, **kwargs):
|
||||||
|
return
|
||||||
|
print(f"{args=}")
|
||||||
|
print(f"{kwargs=}")
|
||||||
|
|
||||||
|
|
||||||
|
async def chatter(rc: veilid.api.RoutingContext, key, send_channel: int, recv_channel: int):
|
||||||
|
last_seq = -1
|
||||||
|
|
||||||
|
send_subkey = veilid.types.ValueSubkey(send_channel)
|
||||||
|
recv_subkey = veilid.types.ValueSubkey(recv_channel)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
msg = input("SEND> ")
|
||||||
|
except EOFError:
|
||||||
|
print("Closing the chat.")
|
||||||
|
await rc.set_dht_value(key, send_subkey, QUIT)
|
||||||
|
return
|
||||||
|
|
||||||
|
await rc.set_dht_value(key, send_subkey, msg.encode())
|
||||||
|
|
||||||
|
while True:
|
||||||
|
resp = await rc.get_dht_value(key, recv_subkey, True)
|
||||||
|
if resp is None:
|
||||||
|
continue
|
||||||
|
if resp.seq == last_seq:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if resp.data == QUIT:
|
||||||
|
print("Other end closed the chat.")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"RECV< {resp.data.decode()}")
|
||||||
|
last_seq = resp.seq
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
async def start():
|
||||||
|
conn = await veilid.json_api_connect("localhost", 5959, cb)
|
||||||
|
|
||||||
|
rc = await conn.new_routing_context()
|
||||||
|
async with rc:
|
||||||
|
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(2))
|
||||||
|
print(f"Chat key: {rec.key}")
|
||||||
|
print(rec.owner)
|
||||||
|
print(vars(rec))
|
||||||
|
|
||||||
|
await chatter(rc, rec.key, 0, 1)
|
||||||
|
|
||||||
|
await rc.close_dht_record(rec.key)
|
||||||
|
await rc.delete_dht_record(rec.key)
|
||||||
|
|
||||||
|
|
||||||
|
async def respond(key, writer):
|
||||||
|
conn = await veilid.json_api_connect("localhost", 5959, cb)
|
||||||
|
|
||||||
|
rc = await conn.new_routing_context()
|
||||||
|
async with rc:
|
||||||
|
await chatter(rc, key, 1, 0)
|
||||||
|
|
||||||
|
|
||||||
|
async def clean(key):
|
||||||
|
conn = await veilid.json_api_connect("localhost", 5959, cb)
|
||||||
|
|
||||||
|
rc = await conn.new_routing_context()
|
||||||
|
async with rc:
|
||||||
|
await rc.close_dht_record(key)
|
||||||
|
await rc.delete_dht_record(key)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if sys.argv[1] == "--start":
|
||||||
|
func = start()
|
||||||
|
elif sys.argv[1] == "--respond":
|
||||||
|
func = respond(sys.argv[2], sys.argv[3])
|
||||||
|
elif sys.argv[1] == "--clean":
|
||||||
|
func = clean(sys.argv[2])
|
||||||
|
else:
|
||||||
|
1 / 0
|
||||||
|
|
||||||
|
asyncio.run(func)
|
Loading…
Reference in New Issue
Block a user