From a34fed903e11bbf0a7a5e04c8e1802b8f7123f12 Mon Sep 17 00:00:00 2001 From: Derek Brinkmann Date: Tue, 12 Sep 2023 15:08:12 -0400 Subject: [PATCH 1/2] Remove SSL Enabled parameter to connect and change host to spacetimedb_uri --- examples/quickstart/client/main.py | 5 +-- .../module_bindings/send_message_reducer.py | 2 + .../module_bindings/set_name_reducer.py | 2 + .../spacetime_websocket_client.py | 37 ++++++++++++------- .../spacetimedb_async_client.py | 18 +++++---- src/spacetimedb_sdk/spacetimedb_client.py | 10 ++--- 6 files changed, 44 insertions(+), 30 deletions(-) diff --git a/examples/quickstart/client/main.py b/examples/quickstart/client/main.py index e6c3238..0989ea4 100644 --- a/examples/quickstart/client/main.py +++ b/examples/quickstart/client/main.py @@ -19,9 +19,8 @@ def run_client(spacetime_client): asyncio.run( spacetime_client.run( local_config.get_string("auth_token"), - "localhost:3000", - "chat", - False, + "http://localhost:3000", + "chatqs", on_connect, ["SELECT * FROM User", "SELECT * FROM Message"], ) diff --git a/examples/quickstart/client/module_bindings/send_message_reducer.py b/examples/quickstart/client/module_bindings/send_message_reducer.py index dd04cdd..3bbef39 100644 --- a/examples/quickstart/client/module_bindings/send_message_reducer.py +++ b/examples/quickstart/client/module_bindings/send_message_reducer.py @@ -7,6 +7,8 @@ from spacetimedb_sdk.spacetimedb_client import Identity +reducer_name = "send_message" + def send_message(text: str): text = text SpacetimeDBClient.instance._reducer_call("send_message", text) diff --git a/examples/quickstart/client/module_bindings/set_name_reducer.py b/examples/quickstart/client/module_bindings/set_name_reducer.py index caef4ee..fd091e9 100644 --- a/examples/quickstart/client/module_bindings/set_name_reducer.py +++ b/examples/quickstart/client/module_bindings/set_name_reducer.py @@ -7,6 +7,8 @@ from spacetimedb_sdk.spacetimedb_client import Identity +reducer_name = "set_name" + def set_name(name: str): name = name SpacetimeDBClient.instance._reducer_call("set_name", name) diff --git a/src/spacetimedb_sdk/spacetime_websocket_client.py b/src/spacetimedb_sdk/spacetime_websocket_client.py index 8251f62..47f78a4 100644 --- a/src/spacetimedb_sdk/spacetime_websocket_client.py +++ b/src/spacetimedb_sdk/spacetime_websocket_client.py @@ -5,7 +5,9 @@ class WebSocketClient: - def __init__(self, protocol, on_connect=None, on_close=None, on_error=None, on_message=None): + def __init__( + self, protocol, on_connect=None, on_close=None, on_error=None, on_message=None + ): self._on_connect = on_connect self._on_close = on_close self._on_error = on_error @@ -14,15 +16,22 @@ def __init__(self, protocol, on_connect=None, on_close=None, on_error=None, on_m self.protocol = protocol self.ws = None self.message_thread = None - self.host = None + self.spacetimedb_uri = None self.name_or_address = None self.is_connected = False - def connect(self, auth, host, name_or_address, ssl_enabled): - protocol = "wss" if ssl_enabled else "ws" - url = f"{protocol}://{host}/database/subscribe/{name_or_address}" + def connect(self, auth, spacetimedb_uri, name_or_address): + if spacetimedb_uri[-1] == "/": + spacetimedb_uri = spacetimedb_uri[:-1] - self.host = host + if spacetimedb_uri[:5] == "https": + spacetimedb_uri = "wss" + spacetimedb_uri[5:] + elif spacetimedb_uri[:4] == "http": + spacetimedb_uri = "ws" + spacetimedb_uri[4:] + + url = f"{spacetimedb_uri}/database/subscribe/{name_or_address}" + + self.spacetimedb_uri = spacetimedb_uri self.name_or_address = name_or_address ws_header = None @@ -35,13 +44,15 @@ def connect(self, auth, host, name_or_address, ssl_enabled): else: headers = None - self.ws = websocket.WebSocketApp(url, - on_open=self.on_open, - on_message=self.on_message, - on_error=self.on_error, - on_close=self.on_close, - header=headers, - subprotocols=[self.protocol]) + self.ws = websocket.WebSocketApp( + url, + on_open=self.on_open, + on_message=self.on_message, + on_error=self.on_error, + on_close=self.on_close, + header=headers, + subprotocols=[self.protocol], + ) self.message_thread = threading.Thread(target=self.ws.run_forever) self.message_thread.start() diff --git a/src/spacetimedb_sdk/spacetimedb_async_client.py b/src/spacetimedb_sdk/spacetimedb_async_client.py index e2622b7..9cb6fa1 100644 --- a/src/spacetimedb_sdk/spacetimedb_async_client.py +++ b/src/spacetimedb_sdk/spacetimedb_async_client.py @@ -133,9 +133,8 @@ def force_close(self): async def run( self, auth_token, - host, + spacetimedb_uri, address_or_name, - ssl_enabled, on_connect, subscription_queries=[], ): @@ -144,7 +143,7 @@ async def run( Args: auth_token : authentication token to use when connecting to the server - host : host name or IP address of the server + spacetimedb_uri : URI of the SpacetimeDB server (ex: https://testnet.spacetimedb.com) address_or_name : address or name of the module to connect to ssl_enabled : True to use SSL, False to not use SSL on_connect : function to call when the client connects to the server @@ -155,7 +154,7 @@ async def run( self._on_async_loop_start() identity_result = await self.connect( - auth_token, host, address_or_name, ssl_enabled, subscription_queries + auth_token, spacetimedb_uri, address_or_name, subscription_queries ) if on_connect is not None: @@ -185,7 +184,11 @@ def on_event(event): await self.close() async def connect( - self, auth_token, host, address_or_name, ssl_enabled, subscription_queries=[] + self, + auth_token, + spacetimedb_uri, + address_or_name, + subscription_queries=[], ): """ Connect to the server. @@ -194,7 +197,7 @@ async def connect( Args: auth_token : authentication token to use when connecting to the server - host : host name or IP address of the server + spacetimedb_uri : URI of the SpacetimeDB server (ex: https://testnet.spacetimedb.com) address_or_name : address or name of the module to connect to ssl_enabled : True to use SSL, False to not use SSL subscription_queries : list of queries to subscribe to @@ -219,9 +222,8 @@ def on_identity_received(auth_token, identity): self.client.connect( auth_token, - host, + spacetimedb_uri, address_or_name, - ssl_enabled, on_connect=None, on_error=on_error, on_disconnect=on_disconnect, diff --git a/src/spacetimedb_sdk/spacetimedb_client.py b/src/spacetimedb_sdk/spacetimedb_client.py index 6638e32..222f8a6 100644 --- a/src/spacetimedb_sdk/spacetimedb_client.py +++ b/src/spacetimedb_sdk/spacetimedb_client.py @@ -215,9 +215,8 @@ def __init__(self, autogen_package): def connect( self, auth_token, - host, + spacetimedb_uri, address_or_name, - ssl_enabled, on_connect, on_disconnect, on_identity, @@ -238,9 +237,8 @@ def connect( # print("CONNECTING " + host + " " + address_or_name) self.wsc.connect( auth_token, - host, + spacetimedb_uri, address_or_name, - ssl_enabled, ) def update(self): @@ -592,8 +590,8 @@ def _do_update(self): decode_func = self.client_cache.reducer_cache[ reducer_event.reducer_name ] - if reducer_event.status == "committed": - args = decode_func(reducer_event.args) + + args = decode_func(reducer_event.args) for reducer_callback in self._reducer_callbacks[ reducer_event.reducer_name From 02bda96339bba1138830b6c84b3ec782361a9a20 Mon Sep 17 00:00:00 2001 From: Derek Brinkmann Date: Tue, 19 Sep 2023 11:40:47 -0400 Subject: [PATCH 2/2] Add protocol if not specified. --- src/spacetimedb_sdk/spacetime_websocket_client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/spacetimedb_sdk/spacetime_websocket_client.py b/src/spacetimedb_sdk/spacetime_websocket_client.py index 47f78a4..ce9d154 100644 --- a/src/spacetimedb_sdk/spacetime_websocket_client.py +++ b/src/spacetimedb_sdk/spacetime_websocket_client.py @@ -29,6 +29,9 @@ def connect(self, auth, spacetimedb_uri, name_or_address): elif spacetimedb_uri[:4] == "http": spacetimedb_uri = "ws" + spacetimedb_uri[4:] + if spacetimedb_uri[:5] != "ws://" and spacetimedb_uri[:6] != "wss://": + spacetimedb_uri = "ws://" + spacetimedb_uri + url = f"{spacetimedb_uri}/database/subscribe/{name_or_address}" self.spacetimedb_uri = spacetimedb_uri