diff --git a/LttPClient.py b/LttPClient.py index 3cdb3206..e2c1751e 100644 --- a/LttPClient.py +++ b/LttPClient.py @@ -52,11 +52,26 @@ class LttPCommandProcessor(ClientCommandProcessor): self.output(f"Setting slow mode to {self.ctx.slow_mode}") @mark_raw - def _cmd_snes(self, snes_address: str = "") -> bool: - """Connect to a snes. - Optionally include network address of a snes to connect to, otherwise show available devices""" + def _cmd_snes(self, snes_options: str = "") -> bool: + """Connect to a snes. Optionally include network address of a snes to connect to, otherwise show available devices; and a SNES device number if more than one SNES is detected""" + + snes_address = self.ctx.snes_address + snes_device_number = -1 + + options = snes_options.split() + num_options = len(options) + + if num_options > 0: + snes_address = options[0] + + if num_options > 1: + try: + snes_device_number = int(options[1]) + except: + pass + self.ctx.snes_reconnect_address = None - asyncio.create_task(snes_connect(self.ctx, snes_address if snes_address else self.ctx.snes_address)) + asyncio.create_task(snes_connect(self.ctx, snes_address, snes_device_number)) return True def _cmd_snes_close(self) -> bool: @@ -504,6 +519,7 @@ async def snes_connect(ctx: Context, address): snes_logger.error('Already connected to SNI, likely awaiting a device.') return + device = None recv_task = None ctx.snes_state = SNESState.SNES_CONNECTING socket = await _snes_connect(ctx, address) @@ -512,15 +528,29 @@ async def snes_connect(ctx: Context, address): try: devices = await get_snes_devices(ctx) + numDevices = len(devices) - if len(devices) == 1: + if numDevices == 1: device = devices[0] elif ctx.snes_reconnect_address: if ctx.snes_attached_device[1] in devices: device = ctx.snes_attached_device[1] else: device = devices[ctx.snes_attached_device[0]] - else: + elif numDevices > 1: + if deviceIndex == -1: + logger.info("Found " + str(numDevices) + " SNES devices; connect to one with /snes