GenericWS: add ability to manually close websocket

This commit is contained in:
Jacob Plaster
2019-02-07 15:34:10 +00:00
parent 8b36d6c4e6
commit dadf28964f

View File

@@ -39,9 +39,10 @@ class GenericWebsocket:
self.events = EventEmitter(
scheduler=asyncio.ensure_future, loop=self.loop)
# overide 'error' event to stop it raising an exception
self.events.on('error', self.on_error)
# self.events.on('error', self.on_error)
self.ws = None
self.max_retries = max_retries
self.attempt_retry = True
def run(self):
"""
@@ -69,16 +70,18 @@ class GenericWebsocket:
async def _main(self, host):
retries = 0
while retries < self.max_retries:
while retries < self.max_retries and self.attempt_retry:
try:
await self._connect(host)
retries = 0
except (ConnectionClosed, socket.error) as e:
self._emit('disconnected')
if (not self.attempt_retry):
return
self.logger.error(str(e))
retries += 1
# wait 5 seconds befor retrying
self.logger.info("Waiting 5 seconds befor retrying...")
self.logger.info("Waiting 5 seconds before retrying...")
await asyncio.sleep(5)
self.logger.info("Reconnect attempt {}/{}".format(retries, self.max_retries))
self.logger.info("Unable to connect to websocket.")
@@ -121,6 +124,7 @@ class GenericWebsocket:
On websocket close print and fire event. This is used by the data server.
"""
self.logger.info("Websocket closed.")
self.attempt_retry = False
await self.ws.close()
self._emit('done')