diff --git a/examples/upgrade_async.py b/examples/upgrade_async.py index 6d5af44..62bbe7e 100644 --- a/examples/upgrade_async.py +++ b/examples/upgrade_async.py @@ -24,7 +24,9 @@ app.ws("/*", { 'idle_timeout': 12, 'open': ws_open, 'message': ws_message, - 'upgrade': ws_upgrade + 'upgrade': ws_upgrade, + 'drain': lambda ws: print('WebSocket backpressure: %s', ws.get_buffered_amount()), + 'close'lambda ws, code, message: print('WebSocket closed') }) app.any("/", lambda res,req: res.end("Nothing to see here!'")) app.listen(3000, lambda config: print("Listening on port http://localhost:%d now\n" % (config.port))) diff --git a/src/socketify/socketify.py b/src/socketify/socketify.py index d07f788..f350f22 100644 --- a/src/socketify/socketify.py +++ b/src/socketify/socketify.py @@ -601,29 +601,35 @@ class WebSocket: def get_user_data_uuid(self): if self.got_socket_data: return self.socket_data_id - user_data = lib.uws_ws_get_user_data(self.SSL, self._ptr) + user_data = lib.uws_ws_get_user_data(self.SSL, self.ws) if user_data == ffi.NULL: return None - (data, socket_data_id) = ffi.from_handle(user_data) - self.socket_data_id = socket_data_id - self.socket_data = data - self.got_socket_data = True - return socket_data_id + try: + (data, socket_data_id) = ffi.from_handle(user_data) + self.socket_data_id = socket_data_id + self.socket_data = data + self.got_socket_data = True + return socket_data_id + except: + return None def get_user_data(self): if self.got_socket_data: return self.socket_data - user_data = lib.uws_ws_get_user_data(self.SSL, self._ptr) + user_data = lib.uws_ws_get_user_data(self.SSL, self.ws) if user_data == ffi.NULL: return None - (data, socket_data_id) = ffi.from_handle(user_data) - self.socket_data_id = socket_data_id - self.socket_data = data - self.got_socket_data = True - return data + try: + (data, socket_data_id) = ffi.from_handle(user_data) + self.socket_data_id = socket_data_id + self.socket_data = data + self.got_socket_data = True + return data + except: + return None def get_buffered_amount(self): - return int(lib.uws_ws_get_buffered_amount(self.SSL, self._ptr)) + return int(lib.uws_ws_get_buffered_amount(self.SSL, self.ws)) def subscribe(self, topic): try: