add hangup listener so we can close websocket

This commit is contained in:
liamcottle
2024-05-21 00:39:26 +12:00
parent 0619dfb3e6
commit 7628ee2ce1
2 changed files with 18 additions and 0 deletions

View File

@@ -15,6 +15,7 @@ class AudioCall:
self.link.set_link_closed_callback(self.on_link_closed)
self.link.set_packet_callback(self.on_packet)
self.audio_packet_listeners = []
self.hangup_listeners = []
def register_audio_packet_listener(self, callback):
self.audio_packet_listeners.append(callback)
@@ -22,10 +23,17 @@ class AudioCall:
def unregister_audio_packet_listener(self, callback):
self.audio_packet_listeners.remove(callback)
def register_hangup_listener(self, callback):
self.hangup_listeners.append(callback)
# handle link being closed
def on_link_closed(self, link):
print("[AudioCall] on_link_closed")
# call all hangup listeners
for hangup_listener in self.hangup_listeners:
hangup_listener()
# handle packet received over link
def on_packet(self, message, packet):

10
web.py
View File

@@ -316,8 +316,18 @@ class ReticulumWebChat:
# ignore errors sending audio packets to websocket
pass
# close websocket when call is hungup
def on_hangup():
if websocket_response.closed is False:
try:
asyncio.run(websocket_response.close(code=WSCloseCode.GOING_AWAY))
except:
# ignore errors closing websocket
pass
# register audio packet listener
audio_call.register_audio_packet_listener(on_audio_packet)
audio_call.register_hangup_listener(on_hangup)
# prepare websocket response
websocket_response = web.WebSocketResponse()