File tree Expand file tree Collapse file tree 4 files changed +39
-20
lines changed
Expand file tree Collapse file tree 4 files changed +39
-20
lines changed Original file line number Diff line number Diff line change 22
33namespace Tempest \Http ;
44
5- /**
6- * Represents a message streamed through server-sent events.
7- */
8- final class ServerSentEvent
5+ interface ServerSentEvent
96{
10- public function __construct (
11- public mixed $ data ,
12- public string $ event = 'message ' ,
13- ) {}
7+ public array $ datalines {
8+ get;
9+ }
1410}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Http ;
4+
5+ use Tempest \Support \Json ;
6+
7+ /**
8+ * Represents a message streamed through server-sent events.
9+ */
10+ final class ServerSentMessage implements ServerSentEvent
11+ {
12+ public function __construct (
13+ public mixed $ data ,
14+ public string $ event = 'message ' ,
15+ ) {}
16+
17+ public array $ datalines {
18+ get {
19+ return [
20+ "event: {$ this ->event }\n" ,
21+ "data: " . Json \encode ($ this ->data ),
22+ "\n\n" ,
23+ ];
24+ }
25+ }
26+ }
Original file line number Diff line number Diff line change 1616use Tempest \Http \Responses \EventStream ;
1717use Tempest \Http \Responses \File ;
1818use Tempest \Http \ServerSentEvent ;
19+ use Tempest \Http \ServerSentMessage ;
1920use Tempest \Support \Json ;
2021use Tempest \View \View ;
2122use Tempest \View \ViewRenderer ;
@@ -119,17 +120,13 @@ private function sendEventStream(EventStream $response): void
119120 break ;
120121 }
121122
122- $ event = 'message ' ;
123- $ data = Json \encode ($ message );
124-
125- if ($ message instanceof ServerSentEvent) {
126- $ event = $ message ->event ;
127- $ data = Json \encode ($ message ->data );
123+ if (! ($ message instanceof ServerSentEvent)) {
124+ $ message = new ServerSentMessage (data: $ message );
128125 }
129126
130- echo " event: { $ event }\n" ;
131- echo " data: { $ data }" ;
132- echo "\n\n" ;
127+ foreach ( $ message -> datalines as $ dataline ) {
128+ echo $ dataline ;
129+ }
133130
134131 if (ob_get_level () > 0 ) {
135132 ob_flush ();
Original file line number Diff line number Diff line change 1313use Tempest \Http \Responses \EventStream ;
1414use Tempest \Http \Responses \File ;
1515use Tempest \Http \Responses \Ok ;
16- use Tempest \Http \ServerSentEvent ;
16+ use Tempest \Http \ServerSentMessage ;
1717use Tempest \Http \Status ;
1818use Tempest \Router \GenericResponseSender ;
1919use Tempest \View \ViewRenderer ;
@@ -190,8 +190,8 @@ public function test_stream_with_custom_event(): void
190190 {
191191 ob_start ();
192192 $ response = new EventStream (function () {
193- yield new ServerSentEvent (data: 'hello ' , event: 'first ' );
194- yield new ServerSentEvent (data: 'goodbye ' , event: 'last ' );
193+ yield new ServerSentMessage (data: 'hello ' , event: 'first ' );
194+ yield new ServerSentMessage (data: 'goodbye ' , event: 'last ' );
195195 });
196196 $ responseSender = $ this ->container ->get (GenericResponseSender::class);
197197 $ responseSender ->send ($ response );
You can’t perform that action at this time.
0 commit comments