Skip to content

Commit 41bd8f8

Browse files
committed
send all websocket subprotocols if serializer not specified
1 parent 26c6c7a commit 41bd8f8

File tree

5 files changed

+29
-14
lines changed

5 files changed

+29
-14
lines changed

xconn/async_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class AsyncClient:
1212
def __init__(
1313
self,
1414
authenticator: auth.IClientAuthenticator = auth.AnonymousAuthenticator(""),
15-
serializer: serializers.Serializer = serializers.JSONSerializer(),
15+
serializer: serializers.Serializer = None,
1616
ws_config: types.WebsocketConfig = types.WebsocketConfig(),
1717
):
1818
self._authenticator = authenticator

xconn/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class Client:
1212
def __init__(
1313
self,
1414
authenticator: auth.IClientAuthenticator = auth.AnonymousAuthenticator(""),
15-
serializer: serializers.Serializer = serializers.JSONSerializer(),
15+
serializer: serializers.Serializer = None,
1616
config: types.TransportConfig = types.TransportConfig(),
1717
):
1818
self._authenticator = authenticator

xconn/helpers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
SERIALIZER_TYPE_CAPNPROTO = 14
2222

23+
WS_SUBPROTOCOLS = ["wamp.2.cbor", "wamp.2.json", "wamp.2.msgpack"]
24+
if _CAPNP_AVAILABLE:
25+
WS_SUBPROTOCOLS.append("wamp.2.capnproto.split_payload")
2326

2427
def get_ws_subprotocol(serializer: serializers.Serializer):
2528
if isinstance(serializer, serializers.JSONSerializer):

xconn/joiner.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@ class WebsocketsJoiner:
99
def __init__(
1010
self,
1111
authenticator: auth.IClientAuthenticator = None,
12-
serializer: serializers.Serializer = serializers.JSONSerializer(),
12+
serializer: serializers.Serializer = None,
1313
ws_config: types.WebsocketConfig = types.WebsocketConfig(),
1414
):
1515
self._authenticator = authenticator
1616
self._serializer = serializer
1717
self._ws_config = ws_config
1818

1919
def join(self, uri: str, realm: str) -> types.BaseSession:
20-
transport = WebSocketTransport.connect(
21-
uri,
22-
subprotocols=[helpers.get_ws_subprotocol(serializer=self._serializer)],
23-
config=self._ws_config,
24-
)
20+
if self._serializer is None:
21+
subprotocols = helpers.WS_SUBPROTOCOLS
22+
else:
23+
subprotocols = [helpers.get_ws_subprotocol(serializer=self._serializer)]
24+
25+
transport = WebSocketTransport.connect(uri, subprotocols=subprotocols, config=self._ws_config)
26+
if self._serializer is None:
27+
self._serializer = helpers.get_serializer(transport.subprotocol())
2528

2629
j: Joiner = joiner.Joiner(realm, serializer=self._serializer, authenticator=self._authenticator)
2730
transport.write(j.send_hello())
@@ -39,19 +42,22 @@ class AsyncWebsocketsJoiner:
3942
def __init__(
4043
self,
4144
authenticator: auth.IClientAuthenticator = None,
42-
serializer: serializers.Serializer = serializers.JSONSerializer(),
45+
serializer: serializers.Serializer = None,
4346
ws_config: types.WebsocketConfig = types.WebsocketConfig(),
4447
):
4548
self._ws_config = ws_config
4649
self._authenticator = authenticator
4750
self._serializer = serializer
4851

4952
async def join(self, uri: str, realm: str) -> types.AsyncBaseSession:
50-
transport = await AsyncWebSocketTransport.connect(
51-
uri,
52-
subprotocols=[helpers.get_ws_subprotocol(serializer=self._serializer)],
53-
config=self._ws_config,
54-
)
53+
if self._serializer is None:
54+
subprotocols = helpers.WS_SUBPROTOCOLS
55+
else:
56+
subprotocols = [helpers.get_ws_subprotocol(serializer=self._serializer)]
57+
58+
transport = await AsyncWebSocketTransport.connect(uri, subprotocols=subprotocols, config=self._ws_config)
59+
if self._serializer is None:
60+
self._serializer = helpers.get_serializer(transport.subprotocol())
5561

5662
j: Joiner = joiner.Joiner(realm, serializer=self._serializer, authenticator=self._authenticator)
5763
await transport.write(j.send_hello())

xconn/transports.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,9 @@ def ping(self, timeout: int = 10) -> float:
304304
received_at = time.time() * 1000
305305
return received_at - created_at
306306

307+
def subprotocol(self):
308+
return self._websocket.subprotocol
309+
307310

308311
class AsyncWebSocketTransport(IAsyncTransport):
309312
def __init__(self, websocket: ClientConnection):
@@ -355,3 +358,6 @@ async def ping(self, timeout: int = 10) -> float:
355358
await asyncio.wait_for(awaitable, timeout)
356359
received_at = time.time() * 1000
357360
return received_at - created_at
361+
362+
def subprotocol(self):
363+
return self._websocket.subprotocol

0 commit comments

Comments
 (0)