mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Fix server shut down on exit.
If there's a websocket being waited on the shut down won't actually happen. Add a new event for shut down and send it to break the websocket out of its loop.
This commit is contained in:
parent
2efe4f6c80
commit
af4a718fc7
@ -14,6 +14,10 @@ async def event_stream(websocket: WebSocket) -> None:
|
|||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
while True:
|
while True:
|
||||||
if not (events := await EventStream.get()).empty:
|
if not (events := await EventStream.get()).empty:
|
||||||
|
if events.shutting_down:
|
||||||
|
await websocket.close()
|
||||||
|
return
|
||||||
|
|
||||||
await websocket.send_json(
|
await websocket.send_json(
|
||||||
jsonable_encoder(
|
jsonable_encoder(
|
||||||
GameUpdateEventsJs.from_events(events, GameContext.get())
|
GameUpdateEventsJs.from_events(events, GameContext.get())
|
||||||
|
|||||||
@ -6,8 +6,10 @@ from threading import Thread
|
|||||||
import uvicorn
|
import uvicorn
|
||||||
from uvicorn import Config
|
from uvicorn import Config
|
||||||
|
|
||||||
|
from game.server import EventStream
|
||||||
from game.server.app import app
|
from game.server.app import app
|
||||||
from game.server.settings import ServerSettings
|
from game.server.settings import ServerSettings
|
||||||
|
from game.sim import GameUpdateEvents
|
||||||
|
|
||||||
|
|
||||||
class Server(uvicorn.Server):
|
class Server(uvicorn.Server):
|
||||||
@ -34,4 +36,5 @@ class Server(uvicorn.Server):
|
|||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
self.should_exit = True
|
self.should_exit = True
|
||||||
|
EventStream.put_nowait(GameUpdateEvents().shut_down())
|
||||||
thread.join()
|
thread.join()
|
||||||
|
|||||||
@ -25,6 +25,7 @@ class GameUpdateEvents:
|
|||||||
deleted_flights: set[UUID] = field(default_factory=set)
|
deleted_flights: set[UUID] = field(default_factory=set)
|
||||||
selected_flight: UUID | None = None
|
selected_flight: UUID | None = None
|
||||||
deselected_flight: bool = False
|
deselected_flight: bool = False
|
||||||
|
shutting_down: bool = False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def empty(self) -> bool:
|
def empty(self) -> bool:
|
||||||
@ -89,3 +90,7 @@ class GameUpdateEvents:
|
|||||||
self.deselected_flight = True
|
self.deselected_flight = True
|
||||||
self.selected_flight = None
|
self.selected_flight = None
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def shut_down(self) -> GameUpdateEvents:
|
||||||
|
self.shutting_down = True
|
||||||
|
return self
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user