�
<��g° � � � d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlmZm
Z
mZmZ d dlmZ d dlmZmZmZmZ ddlmZ ddlmZmZmZ dd lmZmZm Z m!Z!m"Z"m#Z# dd
l$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- dd
l.m/Z/ ddl0m1Z1 ddlm2Z2m3Z3m4Z4m5Z5m6Z6 ddlm7Z7 ddl8m9Z9m:Z: ddlm;Z; ddl0m<Z<m=Z= g d�Z>eeee?egef f Z@eAe5eeBf ZC G d� de<� � ZD G d� d� � ZE G d� d� � ZFeFZG d&d'd#�ZHd(d%�ZIdS ))� )�annotationsN)� Awaitable� Generator�Iterable�Sequence)�
TracebackType)�Any�Callable�Union�cast� )�asyncio_timeout)�Headers�HeadersLike�MultipleValuesError)�InvalidHandshake�
InvalidHeader�InvalidMessage�
InvalidOrigin�InvalidUpgrade�NegotiationError)� Extension�ServerExtensionFactory)� enable_server_permessage_deflate)�build_extension�parse_extension�parse_subprotocol�validate_subprotocols)�SERVER)�State)�ExtensionHeader�
LoggerLike�Origin�
StatusLike�Subprotocol� )�AbortHandshake)�build_response�
check_request)�read_request)�WebSocketCommonProtocol� broadcast)r, �serve�
unix_serve�WebSocketServerProtocol�WebSocketServerc
�� � � e Zd ZdZdZdZdddddedddd� dA� fd!�ZdB� fd$�ZdCd%�Z dDd'�Z
dEdFd.�ZdGd3�Ze
dEdHd5�� � Ze
dId8�� � ZdJd;�ZdKd?�Z dLdMd@�Z� xZS )Nr/ a�
WebSocket server connection.
:class:`WebSocketServerProtocol` provides :meth:`recv` and :meth:`send`
coroutines for receiving and sending messages.
It supports asynchronous iteration to receive messages::
async for message in websocket:
await process(message)
The iterator exits normally when the connection is closed with close code
1000 (OK) or 1001 (going away) or without a close code. It raises
a :exc:`~websockets.exceptions.ConnectionClosedError` when the connection
is closed with any other code.
You may customize the opening handshake in a subclass by
overriding :meth:`process_request` or :meth:`select_subprotocol`.
Args:
ws_server: WebSocket server that created this connection.
See :func:`serve` for the documentation of ``ws_handler``, ``logger``, ``origins``,
``extensions``, ``subprotocols``, ``extra_headers``, and ``server_header``.
See :class:`~websockets.legacy.protocol.WebSocketCommonProtocol` for the
documentation of ``ping_interval``, ``ping_timeout``, ``close_timeout``,
``max_size``, ``max_queue``, ``read_limit``, and ``write_limit``.
F�serverN�
) �logger�origins�
extensions�subprotocols�
extra_headers�
server_header�process_request�select_subprotocol�open_timeout�
ws_handler�nCallable[[WebSocketServerProtocol], Awaitable[Any]] | Callable[[WebSocketServerProtocol, str], Awaitable[Any]]� ws_serverr0 r4 �LoggerLike | Noner5 �Sequence[Origin | None] | Noner6 �'Sequence[ServerExtensionFactory] | Noner7 �Sequence[Subprotocol] | Noner8 �HeadersLikeOrCallable | Noner9 �
str | Noner: �?Callable[[str, Headers], Awaitable[HTTPResponse | None]] | Noner; �LCallable[[Sequence[Subprotocol], Sequence[Subprotocol]], Subprotocol] | Noner<