WebSocket class =============== .. _websocket-reference: The :class:`~micropie.WebSocket` class encapsulates a WebSocket connection. MicroPie constructs an instance for each WebSocket request and passes it as the first argument to your WebSocket handler. Constructor ----------- .. class:: WebSocket(receive, send) Create a new WebSocket wrapper around the ASGI ``receive`` and ``send`` callables. You do not instantiate this class yourself; MicroPie does so internally. Methods ------- .. method:: accept(subprotocol=None, session_id=None) Accept the WebSocket connection. You must call this method before sending or receiving messages. If you provide a *session_id*, MicroPie sets a ``session_id`` cookie during the handshake. The optional *subprotocol* argument specifies a negotiated subprotocol. .. method:: receive_text() Await a text message from the client. Returns a string. Raises :class:`~micropie.ConnectionClosed` if the client has disconnected. If the client sends bytes, MicroPie decodes them as UTF-8 (ignoring invalid sequences) and returns the decoded string. .. method:: receive_bytes() Await a binary message from the client. Returns bytes. Raises :class:`~micropie.ConnectionClosed` if the client has disconnected. If the client sends text, MicroPie returns the UTF-8 encoded bytes. .. method:: send_text(data) Send a text message to the client. Raises ``RuntimeError`` if you have not called :meth:`accept`. .. method:: send_bytes(data) Send a binary message to the client. Raises ``RuntimeError`` if the connection has not been accepted. .. method:: close(code=1000, reason=None) Close the WebSocket connection. By default uses code 1000 (normal closure). The optional *reason* is sent to the client. Attributes ---------- .. attribute:: accepted ``True`` if the WebSocket has been accepted. .. attribute:: session_id The session ID set during the handshake, or ``None`` if not set. Exceptions ---------- MicroPie raises :class:`~micropie.ConnectionClosed` from :meth:`receive_text` and :meth:`receive_bytes` when the client disconnects. See :doc:`exceptions` for exception details.