(
self,
request: httpclient.HTTPRequest,
on_message_callback: Optional[Callable[[Union[None, str, bytes]], None]] = None,
compression_options: Optional[Dict[str, Any]] = None,
ping_interval: Optional[float] = None,
ping_timeout: Optional[float] = None,
max_message_size: int = _default_max_message_size,
subprotocols: Optional[List[str]] = None,
resolver: Optional[Resolver] = None,
)
| 1395 | protocol = None # type: WebSocketProtocol |
| 1396 | |
| 1397 | def __init__( |
| 1398 | self, |
| 1399 | request: httpclient.HTTPRequest, |
| 1400 | on_message_callback: Optional[Callable[[Union[None, str, bytes]], None]] = None, |
| 1401 | compression_options: Optional[Dict[str, Any]] = None, |
| 1402 | ping_interval: Optional[float] = None, |
| 1403 | ping_timeout: Optional[float] = None, |
| 1404 | max_message_size: int = _default_max_message_size, |
| 1405 | subprotocols: Optional[List[str]] = None, |
| 1406 | resolver: Optional[Resolver] = None, |
| 1407 | ) -> None: |
| 1408 | self.connect_future = Future() # type: Future[WebSocketClientConnection] |
| 1409 | self.read_queue = Queue(1) # type: Queue[Union[None, str, bytes]] |
| 1410 | self.key = base64.b64encode(os.urandom(16)) |
| 1411 | self._on_message_callback = on_message_callback |
| 1412 | self.close_code = None # type: Optional[int] |
| 1413 | self.close_reason = None # type: Optional[str] |
| 1414 | self.params = _WebSocketParams( |
| 1415 | ping_interval=ping_interval, |
| 1416 | ping_timeout=ping_timeout, |
| 1417 | max_message_size=max_message_size, |
| 1418 | compression_options=compression_options, |
| 1419 | ) |
| 1420 | |
| 1421 | scheme, sep, rest = request.url.partition(":") |
| 1422 | scheme = {"ws": "http", "wss": "https"}[scheme] |
| 1423 | request.url = scheme + sep + rest |
| 1424 | request.headers.update( |
| 1425 | { |
| 1426 | "Upgrade": "websocket", |
| 1427 | "Connection": "Upgrade", |
| 1428 | "Sec-WebSocket-Key": to_unicode(self.key), |
| 1429 | "Sec-WebSocket-Version": "13", |
| 1430 | } |
| 1431 | ) |
| 1432 | if subprotocols is not None: |
| 1433 | request.headers["Sec-WebSocket-Protocol"] = ",".join(subprotocols) |
| 1434 | if compression_options is not None: |
| 1435 | # Always offer to let the server set our max_wbits (and even though |
| 1436 | # we don't offer it, we will accept a client_no_context_takeover |
| 1437 | # from the server). |
| 1438 | # TODO: set server parameters for deflate extension |
| 1439 | # if requested in self.compression_options. |
| 1440 | request.headers["Sec-WebSocket-Extensions"] = ( |
| 1441 | "permessage-deflate; client_max_window_bits" |
| 1442 | ) |
| 1443 | |
| 1444 | # Websocket connection is currently unable to follow redirects |
| 1445 | request.follow_redirects = False |
| 1446 | |
| 1447 | self.tcp_client = TCPClient(resolver=resolver) |
| 1448 | super().__init__( |
| 1449 | None, |
| 1450 | request, |
| 1451 | lambda: None, |
| 1452 | self._on_http_response, |
| 1453 | 104857600, |
| 1454 | self.tcp_client, |
nothing calls this directly
no test coverage detected