fix: better handling of WS close
This commit is contained in:
parent
39fd743d89
commit
8ab688dc41
1 changed files with 21 additions and 5 deletions
|
|
@ -25,12 +25,20 @@ class NostrClient:
|
||||||
) -> WebSocketApp:
|
) -> WebSocketApp:
|
||||||
def on_error(_, error):
|
def on_error(_, error):
|
||||||
logger.warning(error)
|
logger.warning(error)
|
||||||
|
self.send_req_queue.put_nowait(ValueError("Websocket error."))
|
||||||
|
self.recieve_event_queue.put_nowait(ValueError("Websocket error."))
|
||||||
|
|
||||||
|
def on_close(_, status_code, message):
|
||||||
|
logger.warning(f"Websocket closed: '{status_code}' '{message}'")
|
||||||
|
self.send_req_queue.put_nowait(ValueError("Websocket close."))
|
||||||
|
self.recieve_event_queue.put_nowait(ValueError("Websocket close."))
|
||||||
|
|
||||||
logger.debug(f"Subscribing to websockets for nostrclient extension")
|
logger.debug(f"Subscribing to websockets for nostrclient extension")
|
||||||
ws = WebSocketApp(
|
ws = WebSocketApp(
|
||||||
f"ws://localhost:{settings.port}/nostrclient/api/v1/relay",
|
f"ws://localhost:{settings.port}/nostrclient/api/v1/relay",
|
||||||
on_message=on_message,
|
on_message=on_message,
|
||||||
on_open=on_open,
|
on_open=on_open,
|
||||||
|
on_close=on_close,
|
||||||
on_error=on_error,
|
on_error=on_error,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -53,6 +61,7 @@ class NostrClient:
|
||||||
def on_message(_, message):
|
def on_message(_, message):
|
||||||
self.recieve_event_queue.put_nowait(message)
|
self.recieve_event_queue.put_nowait(message)
|
||||||
|
|
||||||
|
self._safe_ws_stop()
|
||||||
running = True
|
running = True
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
|
|
@ -73,7 +82,7 @@ class NostrClient:
|
||||||
logger.warning(ex)
|
logger.warning(ex)
|
||||||
if req:
|
if req:
|
||||||
await self.send_req_queue.put(req)
|
await self.send_req_queue.put(req)
|
||||||
self.ws = None # todo close
|
self._safe_ws_stop()
|
||||||
await asyncio.sleep(5)
|
await asyncio.sleep(5)
|
||||||
|
|
||||||
async def publish_nostr_event(self, e: NostrEvent):
|
async def publish_nostr_event(self, e: NostrEvent):
|
||||||
|
|
@ -172,6 +181,15 @@ class NostrClient:
|
||||||
|
|
||||||
return [profile_filter]
|
return [profile_filter]
|
||||||
|
|
||||||
|
def _safe_ws_stop(self):
|
||||||
|
if not self.ws:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
self.ws.close()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
self.ws = None
|
||||||
|
|
||||||
async def restart(self):
|
async def restart(self):
|
||||||
await self.unsubscribe_merchants()
|
await self.unsubscribe_merchants()
|
||||||
# Give some time for the CLOSE events to propagate before restarting
|
# Give some time for the CLOSE events to propagate before restarting
|
||||||
|
|
@ -181,16 +199,14 @@ class NostrClient:
|
||||||
await self.send_req_queue.put(ValueError("Restarting NostrClient..."))
|
await self.send_req_queue.put(ValueError("Restarting NostrClient..."))
|
||||||
await self.recieve_event_queue.put(ValueError("Restarting NostrClient..."))
|
await self.recieve_event_queue.put(ValueError("Restarting NostrClient..."))
|
||||||
|
|
||||||
self.ws.close()
|
self._safe_ws_stop()
|
||||||
self.ws = None
|
|
||||||
|
|
||||||
async def stop(self):
|
async def stop(self):
|
||||||
await self.unsubscribe_merchants()
|
await self.unsubscribe_merchants()
|
||||||
|
|
||||||
# Give some time for the CLOSE events to propagate before closing the connection
|
# Give some time for the CLOSE events to propagate before closing the connection
|
||||||
await asyncio.sleep(10)
|
await asyncio.sleep(10)
|
||||||
self.ws.close()
|
self._safe_ws_stop()
|
||||||
self.ws = None
|
|
||||||
|
|
||||||
async def unsubscribe_merchants(self):
|
async def unsubscribe_merchants(self):
|
||||||
await self.send_req_queue.put(["CLOSE", self.subscription_id])
|
await self.send_req_queue.put(["CLOSE", self.subscription_id])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue