. */ namespace SP\Modules\Web\Controllers\Task; use Klein\Response; use SP\Domain\Common\Services\ServiceException; /** * Class TrackStatusController * * @package SP\Modules\Web\Controllers */ final class TrackStatusController { private \SP\Domain\Task\Ports\TaskServiceInterface $taskService; private Response $response; public function __construct(Response $response, \SP\Domain\Task\Ports\TaskServiceInterface $taskService) { $this->response = $response; $this->taskService = $taskService; } /** * @param string $taskId * * @throws \JsonException */ public function trackStatusAction(string $taskId): void { $this->response->header('Content-Type', 'text/event-stream'); $this->response->header('Cache-Control', 'no-store, no-cache'); $this->response->header('Access-Control-Allow-Origin', '*'); $this->response->send(true); ob_end_flush(); try { $this->taskService->trackStatus( $taskId, function ($id, $message) { echo 'id: ', $id, PHP_EOL, 'data: ', $message, PHP_EOL, PHP_EOL; ob_flush(); flush(); } ); } catch (ServiceException $e) { processException($e); } } }