Skip to content

Commit fd5cd1e

Browse files
authored
Merge pull request #73 from JmPotato/add_stop_websocket
Add graceful shutdown logic for WebSocket
2 parents b088752 + 88c71f2 commit fd5cd1e

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

hyperliquid/info.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ def __init__(
2525
if not skip_ws:
2626
self.ws_manager = WebsocketManager(self.base_url)
2727
self.ws_manager.start()
28+
else:
29+
self.ws_manager = None
2830
if meta is None:
2931
meta = self.meta()
3032

@@ -43,6 +45,12 @@ def __init__(
4345
if name not in self.name_to_coin:
4446
self.name_to_coin[name] = spot_info["name"]
4547

48+
def disconnect_websocket(self):
49+
if self.ws_manager is None:
50+
raise RuntimeError("Cannot call disconnect_websocket since skip_ws was used")
51+
else:
52+
self.ws_manager.stop()
53+
4654
def user_state(self, address: str) -> Any:
4755
"""Retrieve trading details about a user.
4856

hyperliquid/websocket_manager.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,25 @@ def __init__(self, base_url):
7373
ws_url = "ws" + base_url[len("http") :] + "/ws"
7474
self.ws = websocket.WebSocketApp(ws_url, on_message=self.on_message, on_open=self.on_open)
7575
self.ping_sender = threading.Thread(target=self.send_ping)
76+
self.stop_event = threading.Event()
7677

7778
def run(self):
78-
self.ping_sender.start()
7979
self.ws.run_forever()
80+
self.ping_sender.start()
8081

8182
def send_ping(self):
82-
while True:
83-
time.sleep(50)
83+
while not self.stop_event.wait(50):
84+
if not self.ws.keep_running:
85+
break
8486
logging.debug("Websocket sending ping")
8587
self.ws.send(json.dumps({"method": "ping"}))
88+
logging.debug("Websocket ping sender stopped")
89+
90+
def stop(self):
91+
self.stop_event.set()
92+
self.ws.close()
93+
if self.ping_sender.is_alive():
94+
self.ping_sender.join()
8695

8796
def on_message(self, _ws, message):
8897
if message == "Websocket connection established.":

0 commit comments

Comments
 (0)