prepare to the new feature

This commit is contained in:
Devaev Maxim 2020-05-25 21:32:01 +03:00
parent aed6bdaf84
commit 9bfc09a265
2 changed files with 24 additions and 10 deletions

View File

@ -171,7 +171,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
while True: while True:
try: try:
streaming = False streaming = False
async for (online, width, height, jpeg) in self.__streamer.read(): async for (online, width, height, jpeg) in self.__streamer.read_stream():
if not streaming: if not streaming:
logger.info("[streamer] Client %s: Streaming ...", self._remote) logger.info("[streamer] Client %s: Streaming ...", self._remote)
streaming = True streaming = True

View File

@ -53,13 +53,12 @@ class StreamerClient:
self.__timeout = timeout self.__timeout = timeout
self.__user_agent = user_agent self.__user_agent = user_agent
async def read(self) -> AsyncGenerator[Tuple[bool, int, int, bytes], None]: async def read_stream(self) -> AsyncGenerator[Tuple[bool, int, int, bytes], None]:
try: try:
async with self.__make_session() as session: async with self.__make_session(infinite=True) as session:
async with session.get( async with session.get(
url=f"http://{self.__host}:{self.__port}/stream", url=self.__make_url("stream"),
params={"extra_headers": "1"}, params={"extra_headers": "1"},
headers={"User-Agent": self.__user_agent},
) as response: ) as response:
aiotools.raise_not_200(response) aiotools.raise_not_200(response)
reader = aiohttp.MultipartReader.from_response(response) reader = aiohttp.MultipartReader.from_response(response)
@ -76,13 +75,28 @@ class StreamerClient:
except Exception as err: # Тут бывают и ассерты, и KeyError, и прочая херня из-за корявых исключений в MultipartReader except Exception as err: # Тут бывают и ассерты, и KeyError, и прочая херня из-за корявых исключений в MultipartReader
raise StreamerError(err) raise StreamerError(err)
def __make_session(self) -> aiohttp.ClientSession: # async def get_snapshot(self) -> Tuple[bool, bytes]:
kwargs: Dict = { # async with self.__make_session(infinite=False) as session:
"timeout": aiohttp.ClientTimeout( # async with session.get(self.__make_url("snapshot")) as response:
# aiotools.raise_not_200(response)
# return (
# (response.headers["X-UStreamer-Online"] == "true"),
# bytes(await response.read()),
# )
def __make_session(self, infinite: bool) -> aiohttp.ClientSession:
kwargs: Dict = {"headers": {"User-Agent": self.__user_agent}}
if infinite:
kwargs["timeout"] = aiohttp.ClientTimeout(
connect=self.__timeout, connect=self.__timeout,
sock_read=self.__timeout, sock_read=self.__timeout,
), )
} else:
kwargs["timeout"] = aiohttp.ClientTimeout(total=self.__timeout)
if self.__unix_path: if self.__unix_path:
kwargs["connector"] = aiohttp.UnixConnector(path=self.__unix_path) kwargs["connector"] = aiohttp.UnixConnector(path=self.__unix_path)
return aiohttp.ClientSession(**kwargs) return aiohttp.ClientSession(**kwargs)
def __make_url(self, handle: str) -> str:
assert not handle.startswith("/"), handle
return f"http://{self.__host}:{self.__port}/{handle}"