You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rtpengine/python/pysip_lite/_Waiter.py

41 lines
910 B

import asyncio
import os
class Waiter:
_r: int = None
_w: int = None
def __init__(self):
self._r, self._w = os.pipe()
def __del__(self):
self.close()
if self._r:
os.close(self._r)
self._r = None
def close(self) -> None:
if self._w:
os.close(self._w)
self._w = None
def fd(self) -> int:
return self._w
def _reader(self, r: int, f: asyncio.Future) -> None:
b = os.read(r, 1)
f.set_result(b.decode())
async def wait_val(self) -> str:
f = asyncio.get_event_loop().create_future()
asyncio.get_event_loop().add_reader(
self._r, lambda: self._reader(self._r, f)
)
res: str = await f
asyncio.get_event_loop().remove_reader(self._r)
return res
async def wait(self) -> bool:
return await self.wait_val() == "1"