Closed Dartly closed 1 week ago
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:meta/meta.dart';
import 'package:vania/src/http/response/stream_file.dart';
enum ResponseType {
...
sse,
}
class Response {
...
case ResponseType.sse:
res.headers.contentType = ContentType.parse('text/event-stream');
res.headers.add(HttpHeaders.cacheControlHeader, 'no-cache');
res.headers.add(HttpHeaders.connectionHeader, 'keep-alive');
res.headers.add(HttpHeaders.transferEncodingHeader, 'chunked');
void writeSSE(String data) {
res.add(utf8.encode('data: $data\n\n'));
}
await for (var event in data) {
writeSSE(jsonEncode(event));
await res.flush();
}
await res.close();
break;
default:
res.write(data);
await res.close();
}
}
...
static sse(
Stream<dynamic> eventStream, {
int statusCode = HttpStatus.ok,
Map<String, String> headers = const {},
}) =>
Response(
data: eventStream,
responseType: ResponseType.sse,
httpStatusCode: statusCode,
headers: headers,
);
}
@Dartly your code merged (#90)
Thank you,
How does Response support returning to SSE