forked from openlp/openlp
Merge branch 'fix_close_websocket_server' into 'master'
Fix closing OpenLP delay(/timeout) See merge request openlp/openlp!225
This commit is contained in:
commit
3c59ac5b2e
@ -37,6 +37,9 @@ USERS = set()
|
|||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
# Disable DEBUG logs for the websockets lib
|
||||||
|
ws_logger = logging.getLogger('websockets')
|
||||||
|
ws_logger.setLevel(logging.ERROR)
|
||||||
|
|
||||||
|
|
||||||
async def handle_websocket(websocket, path):
|
async def handle_websocket(websocket, path):
|
||||||
@ -53,12 +56,15 @@ async def handle_websocket(websocket, path):
|
|||||||
if reply:
|
if reply:
|
||||||
json_reply = json.dumps(reply).encode()
|
json_reply = json.dumps(reply).encode()
|
||||||
await websocket.send(json_reply)
|
await websocket.send(json_reply)
|
||||||
try:
|
while True:
|
||||||
while True:
|
try:
|
||||||
await notify_users()
|
await notify_users()
|
||||||
await asyncio.sleep(0.2)
|
await asyncio.wait_for(websocket.recv(), 0.2)
|
||||||
finally:
|
except asyncio.TimeoutError:
|
||||||
await unregister(websocket)
|
pass
|
||||||
|
except Exception:
|
||||||
|
await unregister(websocket)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
async def register(websocket):
|
async def register(websocket):
|
||||||
@ -123,27 +129,17 @@ class WebSocketWorker(ThreadWorker, RegistryProperties, LogMixin):
|
|||||||
if self.server:
|
if self.server:
|
||||||
# If the websocket server exists, start listening
|
# If the websocket server exists, start listening
|
||||||
self.event_loop.run_until_complete(self.server)
|
self.event_loop.run_until_complete(self.server)
|
||||||
self.event_loop.run_forever()
|
try:
|
||||||
|
self.event_loop.run_forever()
|
||||||
|
finally:
|
||||||
|
self.event_loop.close()
|
||||||
self.quit.emit()
|
self.quit.emit()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""
|
"""
|
||||||
Stop the websocket server
|
Stop the websocket server
|
||||||
"""
|
"""
|
||||||
try:
|
self.event_loop.call_soon_threadsafe(self.event_loop.stop)
|
||||||
if hasattr(self.server, 'ws_server'):
|
|
||||||
self.server.ws_server.close()
|
|
||||||
elif hasattr(self.server, 'server'):
|
|
||||||
self.server.server.close()
|
|
||||||
except RuntimeError:
|
|
||||||
# Sometimes it is already closed
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
self.event_loop.stop()
|
|
||||||
self.event_loop.close()
|
|
||||||
except RuntimeError:
|
|
||||||
# Sometimes it is already closed
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class WebSocketServer(RegistryProperties, LogMixin):
|
class WebSocketServer(RegistryProperties, LogMixin):
|
||||||
|
Loading…
Reference in New Issue
Block a user