diff --git a/hyperliquid/info.py b/hyperliquid/info.py index b59f81e..ebf188c 100644 --- a/hyperliquid/info.py +++ b/hyperliquid/info.py @@ -25,11 +25,12 @@ def __init__( # the original dex. perp_dexs: Optional[List[str]] = None, timeout: Optional[float] = None, + reconnect_ws: Optional[int] = None, # Exposed reconnect parameter to auto-reconnect ): # pylint: disable=too-many-locals super().__init__(base_url, timeout) self.ws_manager: Optional[WebsocketManager] = None if not skip_ws: - self.ws_manager = WebsocketManager(self.base_url) + self.ws_manager = WebsocketManager(self.base_url, reconnect_ws=reconnect_ws) self.ws_manager.start() if spot_meta is None: diff --git a/hyperliquid/websocket_manager.py b/hyperliquid/websocket_manager.py index 4c73a68..c7bc5e3 100644 --- a/hyperliquid/websocket_manager.py +++ b/hyperliquid/websocket_manager.py @@ -75,7 +75,7 @@ def ws_msg_to_identifier(ws_msg: WsMsg) -> Optional[str]: class WebsocketManager(threading.Thread): - def __init__(self, base_url): + def __init__(self, base_url, reconnect_ws: Optional[int] = None): super().__init__() self.subscription_id_counter = 0 self.ws_ready = False @@ -85,10 +85,11 @@ def __init__(self, base_url): self.ws = websocket.WebSocketApp(ws_url, on_message=self.on_message, on_open=self.on_open) self.ping_sender = threading.Thread(target=self.send_ping) self.stop_event = threading.Event() + self.reconnect_ws: Optional[int] = reconnect_ws # Exposed reconnect parameter to auto-reconnect def run(self): self.ping_sender.start() - self.ws.run_forever() + self.ws.run_forever(reconnect=self.reconnect_ws) def send_ping(self): while not self.stop_event.wait(50):