mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +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()
|
||||
while True:
|
||||
if not (events := await EventStream.get()).empty:
|
||||
if events.shutting_down:
|
||||
await websocket.close()
|
||||
return
|
||||
|
||||
await websocket.send_json(
|
||||
jsonable_encoder(
|
||||
GameUpdateEventsJs.from_events(events, GameContext.get())
|
||||
|
||||
@ -6,8 +6,10 @@ from threading import Thread
|
||||
import uvicorn
|
||||
from uvicorn import Config
|
||||
|
||||
from game.server import EventStream
|
||||
from game.server.app import app
|
||||
from game.server.settings import ServerSettings
|
||||
from game.sim import GameUpdateEvents
|
||||
|
||||
|
||||
class Server(uvicorn.Server):
|
||||
@ -34,4 +36,5 @@ class Server(uvicorn.Server):
|
||||
yield
|
||||
finally:
|
||||
self.should_exit = True
|
||||
EventStream.put_nowait(GameUpdateEvents().shut_down())
|
||||
thread.join()
|
||||
|
||||
@ -25,6 +25,7 @@ class GameUpdateEvents:
|
||||
deleted_flights: set[UUID] = field(default_factory=set)
|
||||
selected_flight: UUID | None = None
|
||||
deselected_flight: bool = False
|
||||
shutting_down: bool = False
|
||||
|
||||
@property
|
||||
def empty(self) -> bool:
|
||||
@ -89,3 +90,7 @@ class GameUpdateEvents:
|
||||
self.deselected_flight = True
|
||||
self.selected_flight = None
|
||||
return self
|
||||
|
||||
def shut_down(self) -> GameUpdateEvents:
|
||||
self.shutting_down = True
|
||||
return self
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user