Make Client wait for QUSB2SNES connection and devices, then auto-connect
This commit is contained in:
parent
70d92ecef8
commit
0fa896f8f6
|
@ -343,14 +343,23 @@ async def snes_connect(ctx : Context, address):
|
||||||
address = f"ws://{address}" if "://" not in address else address
|
address = f"ws://{address}" if "://" not in address else address
|
||||||
|
|
||||||
logging.info("Connecting to QUsb2snes at %s ..." % address)
|
logging.info("Connecting to QUsb2snes at %s ..." % address)
|
||||||
|
seen_problems = set()
|
||||||
|
while ctx.snes_state == SNES_CONNECTING:
|
||||||
try:
|
try:
|
||||||
ctx.snes_socket = await websockets.connect(address, ping_timeout=None, ping_interval=None)
|
ctx.snes_socket = await websockets.connect(address, ping_timeout=None, ping_interval=None)
|
||||||
|
except Exception as e:
|
||||||
|
problem = "%s" % e
|
||||||
|
# only tell the user about new problems, otherwise silently lay in wait for a working connection
|
||||||
|
if problem not in seen_problems:
|
||||||
|
seen_problems.add(problem)
|
||||||
|
logging.error(f"Error connecting to QUsb2snes ({problem})")
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
else:
|
||||||
ctx.snes_state = SNES_CONNECTED
|
ctx.snes_state = SNES_CONNECTED
|
||||||
|
try:
|
||||||
DeviceList_Request = {
|
DeviceList_Request = {
|
||||||
"Opcode" : "DeviceList",
|
"Opcode": "DeviceList",
|
||||||
"Space" : "SNES"
|
"Space": "SNES"
|
||||||
}
|
}
|
||||||
await ctx.snes_socket.send(json.dumps(DeviceList_Request))
|
await ctx.snes_socket.send(json.dumps(DeviceList_Request))
|
||||||
|
|
||||||
|
@ -358,7 +367,12 @@ async def snes_connect(ctx : Context, address):
|
||||||
devices = reply['Results'] if 'Results' in reply and len(reply['Results']) > 0 else None
|
devices = reply['Results'] if 'Results' in reply and len(reply['Results']) > 0 else None
|
||||||
|
|
||||||
if not devices:
|
if not devices:
|
||||||
raise Exception('No device found')
|
logging.info('No device found, waiting for device. Run multibridge and connect it to QUSB2SNES.')
|
||||||
|
while not devices:
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
await ctx.snes_socket.send(json.dumps(DeviceList_Request))
|
||||||
|
reply = json.loads(await ctx.snes_socket.recv())
|
||||||
|
devices = reply['Results'] if 'Results' in reply and len(reply['Results']) > 0 else None
|
||||||
|
|
||||||
logging.info("Available devices:")
|
logging.info("Available devices:")
|
||||||
for id, device in enumerate(devices):
|
for id, device in enumerate(devices):
|
||||||
|
|
Loading…
Reference in New Issue