mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-23 00:46:37 +00:00
feat: stage4 — SSE event streamer and ResultManager
This commit is contained in:
@@ -5,6 +5,7 @@ from __future__ import annotations
|
||||
import asyncio
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from gps_denied.core.sse import SSEEventStreamer
|
||||
from gps_denied.db.repository import FlightRepository
|
||||
from gps_denied.schemas import GPSPoint
|
||||
from gps_denied.schemas.flight import (
|
||||
@@ -27,8 +28,9 @@ from gps_denied.schemas.flight import (
|
||||
class FlightProcessor:
|
||||
"""Orchestrates flight business logic."""
|
||||
|
||||
def __init__(self, repo: FlightRepository) -> None:
|
||||
def __init__(self, repo: FlightRepository, sse: SSEEventStreamer) -> None:
|
||||
self.repo = repo
|
||||
self.sse = sse
|
||||
|
||||
async def create_flight(self, req: FlightCreateRequest) -> FlightResponse:
|
||||
flight = await self.repo.insert_flight(
|
||||
@@ -190,12 +192,7 @@ class FlightProcessor:
|
||||
)
|
||||
|
||||
async def stream_events(self, flight_id: str, client_id: str):
|
||||
"""Async generator for SSE dummy stream."""
|
||||
from gps_denied.schemas.events import SSEEventType
|
||||
import json
|
||||
|
||||
yield f"data: {json.dumps({'event': SSEEventType.FRAME_PROCESSED.value, 'data': {'msg': 'connected'}})}\n\n"
|
||||
for i in range(5):
|
||||
await asyncio.sleep(1)
|
||||
yield f"data: {json.dumps({'event': SSEEventType.FRAME_PROCESSED.value, 'data': {'frame_id': i, 'gps': {'lat': 48, 'lon': 37}, 'confidence': 0.9, 'timestamp': datetime.now(timezone.utc).isoformat()}})}\n\n"
|
||||
yield f"data: {json.dumps({'event': SSEEventType.FLIGHT_COMPLETED.value, 'data': {'frames_total': 5, 'frames_processed': 5}})}\n\n"
|
||||
"""Async generator for SSE stream."""
|
||||
# Yield from the real SSE streamer generator
|
||||
async for event in self.sse.stream_generator(flight_id, client_id):
|
||||
yield event
|
||||
|
||||
Reference in New Issue
Block a user