Allow closed websocket connections to be garbage collected

This commit is contained in:
Thomas Lovén 2022-07-24 20:26:49 +00:00
parent 1076bb2c9c
commit d58a29f4f9
2 changed files with 17 additions and 5 deletions

View File

@ -133,9 +133,13 @@ class BrowserModBrowser:
def connection(self):
return self._connections
@connection.setter
def connection(self, con):
self._connections.append(con)
def open_connection(self, connection, cid):
self._connections.append((connection, cid))
def close_connection(self, connection):
self._connections = list(
filter(lambda v: v[0] != connection, self._connections)
)
def getBrowser(hass, browserID, *, create=True):

View File

@ -38,13 +38,21 @@ async def async_setup_connection(hass):
def listener(data):
connection.send_message(event_message(msg["id"], {"result": data}))
connection.subscriptions[msg["id"]] = store.add_listener(listener)
store_listener = store.add_listener(listener)
def unsubscriber():
store_listener()
dev = getBrowser(hass, browserID, create=False)
if dev:
dev.close_connection(connection)
connection.subscriptions[msg["id"]] = unsubscriber
connection.send_result(msg["id"])
if store.get_browser(browserID).enabled:
dev = getBrowser(hass, browserID)
dev.update_settings(hass, store.get_browser(browserID).asdict())
dev.connection = (connection, msg["id"])
dev.open_connection(connection, msg["id"])
await store.set_browser(
browserID, last_seen=datetime.now(tz=timezone.utc).isoformat()
)