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