Fix surprise incompatibility with websockets 14 :/
This commit is contained in:
parent
41f5369b2f
commit
b9039b2ad4
2 changed files with 7 additions and 12 deletions
src/mpd_now_playable
|
@ -35,7 +35,7 @@ class WebsocketsReceiverConfig(BaseReceiverConfig):
|
||||||
#: The hostname you'd like your WebSockets server to listen on. In most
|
#: The hostname you'd like your WebSockets server to listen on. In most
|
||||||
#: cases the default behaviour, which binds to all network interfaces, will
|
#: cases the default behaviour, which binds to all network interfaces, will
|
||||||
#: be fine.
|
#: be fine.
|
||||||
host: Optional[Host | tuple[Host, ...]] = None
|
host: Optional[Host] = None
|
||||||
|
|
||||||
|
|
||||||
ReceiverConfig = Annotated[
|
ReceiverConfig = Annotated[
|
||||||
|
|
|
@ -2,7 +2,7 @@ from pathlib import Path
|
||||||
|
|
||||||
import ormsgpack
|
import ormsgpack
|
||||||
from websockets import broadcast
|
from websockets import broadcast
|
||||||
from websockets.server import WebSocketServerProtocol, serve
|
from websockets.asyncio.server import Server, ServerConnection, serve
|
||||||
from yarl import URL
|
from yarl import URL
|
||||||
|
|
||||||
from ...config.model import WebsocketsReceiverConfig
|
from ...config.model import WebsocketsReceiverConfig
|
||||||
|
@ -24,12 +24,11 @@ def default(value: object) -> object:
|
||||||
class WebsocketsReceiver(Receiver):
|
class WebsocketsReceiver(Receiver):
|
||||||
config: WebsocketsReceiverConfig
|
config: WebsocketsReceiverConfig
|
||||||
player: Player
|
player: Player
|
||||||
connections: set[WebSocketServerProtocol]
|
server: Server
|
||||||
last_status: bytes = MSGPACK_NULL
|
last_status: bytes = MSGPACK_NULL
|
||||||
|
|
||||||
def __init__(self, config: WebsocketsReceiverConfig):
|
def __init__(self, config: WebsocketsReceiverConfig):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.connections = set()
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def loop_factory(cls) -> DefaultLoopFactory:
|
def loop_factory(cls) -> DefaultLoopFactory:
|
||||||
|
@ -37,18 +36,14 @@ class WebsocketsReceiver(Receiver):
|
||||||
|
|
||||||
async def start(self, player: Player) -> None:
|
async def start(self, player: Player) -> None:
|
||||||
self.player = player
|
self.player = player
|
||||||
await serve(
|
self.server = await serve(
|
||||||
self.handle, host=self.config.host, port=self.config.port, reuse_port=True
|
self.handle, host=self.config.host, port=self.config.port, reuse_port=True
|
||||||
)
|
)
|
||||||
|
|
||||||
async def handle(self, conn: WebSocketServerProtocol) -> None:
|
async def handle(self, conn: ServerConnection) -> None:
|
||||||
self.connections.add(conn)
|
|
||||||
await conn.send(self.last_status)
|
await conn.send(self.last_status)
|
||||||
try:
|
|
||||||
await conn.wait_closed()
|
await conn.wait_closed()
|
||||||
finally:
|
|
||||||
self.connections.remove(conn)
|
|
||||||
|
|
||||||
async def update(self, playback: Playback) -> None:
|
async def update(self, playback: Playback) -> None:
|
||||||
self.last_status = ormsgpack.packb(playback, default=default)
|
self.last_status = ormsgpack.packb(playback, default=default)
|
||||||
broadcast(self.connections, self.last_status)
|
broadcast(self.server.connections, self.last_status)
|
||||||
|
|
Loading…
Add table
Reference in a new issue