import 'dart:async'; import 'dart:convert'; import 'dart:io' show Cookie; import 'dart:typed_data'; import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/http.dart'; import 'native_socket.dart'; import 'wings_request.dart'; import 'wings_response.dart'; class AngelWings extends Driver { factory AngelWings(Angel app) { return AngelWings._(app, null); } AngelWings._( Angel app, Future Function(dynamic, int) serverGenerator) : super(app, serverGenerator); @override void addCookies(int response, Iterable cookies) { for (var cookie in cookies) { setHeader(response, 'set-cookie', cookie.toString()); } } @override Future closeResponse(int response) { closeNativeSocket(response); return Future.value(); } @override Future createRequestContext(int request, int response) { // TODO: implement createRequestContext return null; } @override Future createResponseContext(int request, int response, [WingsRequestContext correspondingRequest]) { // TODO: implement createResponseContext return null; } @override Stream createResponseStreamFromRawRequest(int request) { return Stream.fromIterable([request]); } @override void setChunkedEncoding(int response, bool value) { // TODO: implement setChunkedEncoding } @override void setContentLength(int response, int length) { writeStringToResponse(response, 'content-length: $length\r\n'); } @override void setHeader(int response, String key, String value) { writeStringToResponse(response, '$key: $value\r\n'); } @override void setStatusCode(int response, int value) { // HTTP-Version SP Status-Code SP Reason-Phrase CRLF writeStringToResponse(response, 'HTTP/1.1 $value\r\n'); } @override // TODO: implement uri Uri get uri => null; @override void writeStringToResponse(int response, String value) { writeToResponse(response, utf8.encode(value)); } @override void writeToResponse(int response, List data) { var buf = data is Uint8List ? data : Uint8List.fromList(data); writeToNativeSocket(response, buf); } }