Add ping/pong to websocket

This commit is contained in:
JonnyWong16 2018-07-03 18:10:52 -07:00
parent c2ba2b4e98
commit 1da4b8ecb4
2 changed files with 38 additions and 0 deletions

View file

@ -421,6 +421,8 @@ def initialize_scheduler():
schedule_job(activity_pinger.connect_server, 'Check for server response', schedule_job(activity_pinger.connect_server, 'Check for server response',
hours=0, minutes=0, seconds=0) hours=0, minutes=0, seconds=0)
schedule_job(web_socket.send_ping, 'Websocket ping',
hours=0, minutes=0, seconds=10)
else: else:
# Cancel all jobs # Cancel all jobs
@ -440,6 +442,8 @@ def initialize_scheduler():
# Schedule job to reconnect server # Schedule job to reconnect server
schedule_job(activity_pinger.connect_server, 'Check for server response', schedule_job(activity_pinger.connect_server, 'Check for server response',
hours=0, minutes=0, seconds=60, args=(False,)) hours=0, minutes=0, seconds=60, args=(False,))
schedule_job(web_socket.send_ping, 'Websocket ping',
hours=0, minutes=0, seconds=0)
# Start scheduler # Start scheduler
if start_jobs and len(SCHED.get_jobs()): if start_jobs and len(SCHED.get_jobs()):

View file

@ -31,6 +31,8 @@ import logger
name = 'websocket' name = 'websocket'
opcode_data = (websocket.ABNF.OPCODE_TEXT, websocket.ABNF.OPCODE_BINARY) opcode_data = (websocket.ABNF.OPCODE_TEXT, websocket.ABNF.OPCODE_BINARY)
ws_shutdown = False ws_shutdown = False
pong_timer = None
pong_count = 0
def start_thread(): def start_thread():
@ -58,6 +60,7 @@ def on_connect():
plexpy.PLEX_SERVER_UP = True plexpy.PLEX_SERVER_UP = True
plexpy.initialize_scheduler() plexpy.initialize_scheduler()
send_ping()
def on_disconnect(): def on_disconnect():
@ -91,6 +94,34 @@ def close():
plexpy.WS_CONNECTED = False plexpy.WS_CONNECTED = False
def send_ping():
if plexpy.WS_CONNECTED:
# logger.debug(u"Tautulli WebSocket :: Sending ping.")
plexpy.WEBSOCKET.ping("Hi?")
global pong_timer
pong_timer = threading.Timer(5.0, wait_pong)
pong_timer.daemon = True
pong_timer.start()
def wait_pong():
global pong_count
pong_count += 1
logger.warning(u"Tautulli WebSocket :: Failed to receive pong from websocket, ping attempt %s." % str(pong_count))
if pong_count >= plexpy.CONFIG.WEBSOCKET_CONNECTION_ATTEMPTS:
close()
def receive_pong():
# logger.debug(u"Tautulli WebSocket :: Received pong.")
global pong_timer
if pong_timer:
pong_timer = pong_timer.cancel()
def run(): def run():
from websocket import create_connection from websocket import create_connection
@ -196,7 +227,10 @@ def receive(ws):
ws.send_close() ws.send_close()
return frame.opcode, None return frame.opcode, None
elif frame.opcode == websocket.ABNF.OPCODE_PING: elif frame.opcode == websocket.ABNF.OPCODE_PING:
# logger.debug(u"Tautulli WebSocket :: Received ping, sending pong.")
ws.pong("Hi!") ws.pong("Hi!")
elif frame.opcode == websocket.ABNF.OPCODE_PONG:
receive_pong()
return None, None return None, None