diff --git a/confluent_client/bin/nodeconsole b/confluent_client/bin/nodeconsole index 5bd0def1..53ff66f5 100755 --- a/confluent_client/bin/nodeconsole +++ b/confluent_client/bin/nodeconsole @@ -681,6 +681,8 @@ def draw_text(text, width, height): cursor_left(len(text)) def draw_image(bindata, width, height, doscale=True): + if not bindata: + return imageformat = os.environ.get('CONFLUENT_IMAGE_PROTOCOL', 'kitty') if doscale and Image and width: binfile = io.BytesIO() @@ -1110,6 +1112,7 @@ async def do_vnc(node, url, outputfile=None): break except vnc.VNCReceiverTerminated: # The VNC receiver task has terminated unexpectedly + draw_node(node, None, 'Video not connected', '', cwidth, cheight) break retries = 5 # Save as PNG using PIL/pillow @@ -1124,12 +1127,13 @@ async def do_vnc(node, url, outputfile=None): if not streaming: keeprunning = False break - except ValueError as e: + except Exception as e: draw_node(node, None, str(e), '', cwidth, cheight) - retries -= 1 - if retries <= 0: - keeprunning = False - sys.stderr.write(f'VNC connection for node {node} failed with error: {e}\n') + if not streaming: + retries -= 1 + if retries <= 0: + keeprunning = False + #sys.stderr.write(f'VNC connection for node {node} failed with error: {e}\n') await asyncio.sleep(1) diff --git a/confluent_client/confluent/vnc.py b/confluent_client/confluent/vnc.py index 0265830e..360e1ebe 100644 --- a/confluent_client/confluent/vnc.py +++ b/confluent_client/confluent/vnc.py @@ -92,13 +92,15 @@ class VNCClient: self.copytext = None self._updating = True self.decompressor = zlib.decompressobj() + await self._do_vnc_handshake() self._input_queue = asyncio.Queue() self._input_task = asyncio.create_task(self._input_worker()) - await self._do_vnc_handshake() return self async def _input_worker(self): while True: + if self.receiver is not None and self.receiver.done(): + break keys, modifierkeys = await self._input_queue.get() payload = ByteStream() for modkey in (modifierkeys or []): @@ -163,7 +165,7 @@ class VNCClient: async def _do_vnc_handshake(self): rfbver = await self.reader.readline() if not rfbver: - raise Exception('Connection failed to VNC') + raise Exception('Video not connected') if not rfbver.startswith(b'RFB 003.008'): self.writer.close() await self.writer.wait_closed()