Kontrola emailu a zaslaní notifikace

marcelxy
Člen | 70
+
0
-

Zdravím,
neumí někdo poradit jak posílat do prohlížeče nove příchozí emaily které každou 1min kontroluje metoda spouštěná cronem ,když zjistí nový email zapíše ho do db a pak ho potřebuji poslat do prohlížeče přes funkci flusch() (bez dotazu prohlížeče ajaxem atd! takhle to mám vyřešeno už nyní)
a to ještě kontroluje 20 emailových učtu postupně a příchozí emaily by měl posílat těm přihlášeným uživatelům kterým patří ne všem všechno.

v prohlizeci toto

var source = new EventSource("moje metoda na kontrolu emailu.php");
  source.onmessage = function(event) {
    document.getElementById("novyEmail").innerHTML += event.data + "<br>";
}

a do presenteru nevim jak toto implementovat aby to fungovalo?

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

echo "data: nový prichozi email";
flush();

díky za rady

Editoval marcelxy (20. 5. 2021 15:30)

Michal Kumžák
Člen | 106
+
0
-

Ahoj

Tohle je klasický případ pro websocket. Jinak to do toho prohlížeče server sám nikdy nepošle.

dakur
Člen | 493
+
0
-

A ten kód by v presenteru vypadal asi takto:

public function actionDefault(): void
{
	// způsob, jakým se response sestaví
	$response = new CallbackResponse(function (IRequest $request, IResponse $response) {
		$response->addHeader('Content-Type', 'text/event-stream');
		$response->addHeader('Cache-Control', 'no-cache');
		echo 'data: nový prichozi email';
	});

	// odeslání response
	$this->sendResponse($response);
}