refactoring

This commit is contained in:
Maxim Devaev 2022-11-03 18:52:05 +03:00
parent 1a28038543
commit 209be98eb5

View File

@ -121,7 +121,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
self.__kvmd_ws: (KvmdClientWs | None) = None self.__kvmd_ws: (KvmdClientWs | None) = None
self.__fb_queue: "asyncio.Queue[dict]" = asyncio.Queue() self.__fb_queue: "asyncio.Queue[dict]" = asyncio.Queue()
self.__fb_key_required = False self.__fb_has_key = False
# Эти состояния шарить не обязательно - бекенд исключает дублирующиеся события. # Эти состояния шарить не обязательно - бекенд исключает дублирующиеся события.
# Все это нужно только чтобы не посылать лишние жсоны в сокет KVMD # Все это нужно только чтобы не посылать лишние жсоны в сокет KVMD
@ -196,7 +196,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
streaming = False streaming = False
async with streamer.reading() as read_frame: async with streamer.reading() as read_frame:
while True: while True:
frame = await read_frame(self.__fb_key_required) frame = await read_frame(not self.__fb_has_key)
if not streaming: if not streaming:
logger.info("%s [streamer]: Streaming ...", self._remote) logger.info("%s [streamer]: Streaming ...", self._remote)
streaming = True streaming = True
@ -244,7 +244,6 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
} }
async def __fb_sender_task_loop(self) -> None: # pylint: disable=too-many-branches async def __fb_sender_task_loop(self) -> None: # pylint: disable=too-many-branches
has_h264_key = False
last: (dict | None) = None last: (dict | None) = None
async for _ in self._send_fb_allowed(): async for _ in self._send_fb_allowed():
while True: while True:
@ -260,7 +259,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
or len(last["data"]) + len(frame["data"]) > 4194304 or len(last["data"]) + len(frame["data"]) > 4194304
)) ))
): ):
has_h264_key = (frame["format"] == StreamFormats.H264 and frame["key"]) self.__fb_has_key = (frame["format"] == StreamFormats.H264 and frame["key"])
last = frame last = frame
if self.__fb_queue.qsize() == 0: if self.__fb_queue.qsize() == 0:
break break
@ -292,11 +291,9 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
elif last["format"] == StreamFormats.H264: elif last["format"] == StreamFormats.H264:
if not self._encodings.has_h264: if not self._encodings.has_h264:
raise RfbError("The client doesn't want to accept H264 anymore") raise RfbError("The client doesn't want to accept H264 anymore")
if has_h264_key: if self.__fb_has_key:
self.__fb_key_required = False
await self._send_fb_h264(last["data"]) await self._send_fb_h264(last["data"])
else: else:
self.__fb_key_required = True
await self._send_fb_allow_again() await self._send_fb_allow_again()
else: else:
raise RuntimeError(f"Unknown format: {last['format']}") raise RuntimeError(f"Unknown format: {last['format']}")