Reconnection logic
This commit is contained in:
parent
ab54b0234f
commit
f6b7667155
17
chat.py
17
chat.py
|
@ -40,13 +40,14 @@ with conn.turn() as t:
|
|||
S.Endpoint(t, S.Observe(Says(S.CAPTURE, S.CAPTURE)),
|
||||
on_msg=lambda t, who, what: print(who, 'said', repr(what)))
|
||||
|
||||
async def reconnect(loop):
|
||||
while conn:
|
||||
did_connect = await conn.main(loop, on_connected=lambda: print('-'*50, 'Connected'))
|
||||
if did_connect:
|
||||
print('-'*50, 'Disconnected')
|
||||
else:
|
||||
await asyncio.sleep(2)
|
||||
async def on_connected():
|
||||
print('-'*50, 'Connected')
|
||||
async def on_disconnected(did_connect):
|
||||
if did_connect:
|
||||
print('-'*50, 'Disconnected')
|
||||
else:
|
||||
await asyncio.sleep(2)
|
||||
return bool(conn)
|
||||
|
||||
def accept_input():
|
||||
global conn
|
||||
|
@ -62,7 +63,7 @@ def accept_input():
|
|||
loop = asyncio.get_event_loop()
|
||||
loop.set_debug(True)
|
||||
threading.Thread(target=accept_input, daemon=True).start()
|
||||
loop.run_until_complete(reconnect(loop))
|
||||
loop.run_until_complete(conn.reconnecting_main(loop, on_connected, on_disconnected))
|
||||
loop.stop()
|
||||
loop.run_forever()
|
||||
loop.close()
|
||||
|
|
17
ovlinfo.py
17
ovlinfo.py
|
@ -23,17 +23,18 @@ with conn.turn() as t:
|
|||
on_add=add_uplink,
|
||||
on_del=del_uplink)
|
||||
|
||||
async def reconnect(loop):
|
||||
while conn:
|
||||
did_connect = await conn.main(loop, on_connected=lambda: print('-'*50, 'Connected'))
|
||||
if did_connect:
|
||||
print('-'*50, 'Disconnected')
|
||||
else:
|
||||
await asyncio.sleep(2)
|
||||
async def on_connected():
|
||||
print('-'*50, 'Connected')
|
||||
async def on_disconnected(did_connect):
|
||||
if did_connect:
|
||||
print('-'*50, 'Disconnected')
|
||||
else:
|
||||
await asyncio.sleep(2)
|
||||
return True
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.set_debug(True)
|
||||
loop.run_until_complete(reconnect(loop))
|
||||
loop.run_until_complete(conn.reconnecting_main(loop, on_connected, on_disconnected))
|
||||
loop.stop()
|
||||
loop.run_forever()
|
||||
loop.close()
|
||||
|
|
2
setup.py
2
setup.py
|
@ -5,7 +5,7 @@ except ImportError:
|
|||
|
||||
setup(
|
||||
name="mini-syndicate",
|
||||
version="0.0.2",
|
||||
version="0.0.3",
|
||||
author="Tony Garnock-Jones",
|
||||
author_email="tonyg@leastfixedpoint.com",
|
||||
license="GNU General Public License v3 or later (GPLv3+)",
|
||||
|
|
|
@ -206,6 +206,18 @@ class Connection(object):
|
|||
def _disconnect(self):
|
||||
raise Exception('subclassresponsibility')
|
||||
|
||||
async def reconnecting_main(self, loop, on_connected=None, on_disconnected=None):
|
||||
should_run = True
|
||||
while should_run:
|
||||
did_connect = await self.main(loop, on_connected=on_connected)
|
||||
if on_disconnected:
|
||||
should_run = await on_disconnected(did_connect)
|
||||
else:
|
||||
if did_connect:
|
||||
pass # Reconnect immediately
|
||||
else:
|
||||
asyncio.sleep(2)
|
||||
|
||||
@classmethod
|
||||
def from_url(cls, s):
|
||||
return url.connection_from_url(s)
|
||||
|
@ -258,7 +270,7 @@ class _StreamConnection(Connection, asyncio.Protocol):
|
|||
return False
|
||||
|
||||
try:
|
||||
if on_connected: on_connected()
|
||||
if on_connected: await on_connected()
|
||||
await self.stop_signal
|
||||
return True
|
||||
finally:
|
||||
|
@ -336,7 +348,7 @@ class WebsocketConnection(Connection):
|
|||
|
||||
try:
|
||||
async with websockets.connect(self.url) as ws:
|
||||
if on_connected: on_connected()
|
||||
if on_connected: await on_connected()
|
||||
self.ws = ws
|
||||
self._on_connected()
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue