mirror of https://github.com/grpc/grpc-dart.git
Merge 878b0de5ad
into aebb65cbf2
This commit is contained in:
commit
7aa59ebf0a
|
@ -31,6 +31,7 @@ import 'service.dart';
|
|||
|
||||
typedef ServiceLookup = Service? Function(String service);
|
||||
typedef GrpcErrorHandler = void Function(GrpcError error, StackTrace? trace);
|
||||
typedef GrpcErrorTransformer = GrpcError? Function(GrpcError error, StackTrace? trace);
|
||||
|
||||
/// Handles an incoming gRPC call.
|
||||
class ServerHandler extends ServiceCall {
|
||||
|
@ -40,6 +41,7 @@ class ServerHandler extends ServiceCall {
|
|||
final List<ServerInterceptor> _serverInterceptors;
|
||||
final CodecRegistry? _codecRegistry;
|
||||
final GrpcErrorHandler? _errorHandler;
|
||||
final GrpcErrorTransformer? _errorTransformer;
|
||||
|
||||
// ignore: cancel_subscriptions
|
||||
StreamSubscription<GrpcMessage>? _incomingSubscription;
|
||||
|
@ -89,6 +91,7 @@ class ServerHandler extends ServiceCall {
|
|||
X509Certificate? clientCertificate,
|
||||
InternetAddress? remoteAddress,
|
||||
GrpcErrorHandler? errorHandler,
|
||||
GrpcErrorTransformer? errorTransformer,
|
||||
this.onDataReceived,
|
||||
}) : _stream = stream,
|
||||
_serviceLookup = serviceLookup,
|
||||
|
@ -97,6 +100,7 @@ class ServerHandler extends ServiceCall {
|
|||
_clientCertificate = clientCertificate,
|
||||
_remoteAddress = remoteAddress,
|
||||
_errorHandler = errorHandler,
|
||||
_errorTransformer = errorTransformer,
|
||||
_serverInterceptors = serverInterceptors;
|
||||
|
||||
@override
|
||||
|
@ -458,6 +462,7 @@ class ServerHandler extends ServiceCall {
|
|||
|
||||
void _sendError(GrpcError error, [StackTrace? trace]) {
|
||||
_errorHandler?.call(error, trace);
|
||||
error = _errorTransformer?.call(error, trace) ?? error;
|
||||
|
||||
sendTrailers(
|
||||
status: error.code,
|
||||
|
|
|
@ -90,6 +90,7 @@ class ConnectionServer {
|
|||
final List<ServerInterceptor> _serverInterceptors;
|
||||
final CodecRegistry? _codecRegistry;
|
||||
final GrpcErrorHandler? _errorHandler;
|
||||
final GrpcErrorTransformer? _errorTransformer;
|
||||
final ServerKeepAliveOptions _keepAliveOptions;
|
||||
|
||||
@visibleForTesting
|
||||
|
@ -104,11 +105,13 @@ class ConnectionServer {
|
|||
List<ServerInterceptor> serverInterceptors = const <ServerInterceptor>[],
|
||||
CodecRegistry? codecRegistry,
|
||||
GrpcErrorHandler? errorHandler,
|
||||
GrpcErrorTransformer? errorTransformer,
|
||||
this._keepAliveOptions = const ServerKeepAliveOptions(),
|
||||
]) : _codecRegistry = codecRegistry,
|
||||
_interceptors = interceptors,
|
||||
_serverInterceptors = serverInterceptors,
|
||||
_errorHandler = errorHandler {
|
||||
_errorHandler = errorHandler,
|
||||
_errorTransformer = errorTransformer {
|
||||
for (final service in services) {
|
||||
_services[service.$name] = service;
|
||||
}
|
||||
|
@ -197,6 +200,7 @@ class Server extends ConnectionServer {
|
|||
super.interceptors,
|
||||
super.codecRegistry,
|
||||
super.errorHandler,
|
||||
super.errorTransformer,
|
||||
super.keepAlive,
|
||||
]);
|
||||
|
||||
|
@ -208,12 +212,14 @@ class Server extends ConnectionServer {
|
|||
List<ServerInterceptor> serverInterceptors = const <ServerInterceptor>[],
|
||||
CodecRegistry? codecRegistry,
|
||||
GrpcErrorHandler? errorHandler,
|
||||
GrpcErrorTransformer? errorTransformer,
|
||||
}) : super(
|
||||
services,
|
||||
interceptors,
|
||||
serverInterceptors,
|
||||
codecRegistry,
|
||||
errorHandler,
|
||||
errorTransformer,
|
||||
keepAliveOptions,
|
||||
);
|
||||
|
||||
|
@ -321,6 +327,7 @@ class Server extends ConnectionServer {
|
|||
// ignore: unnecessary_cast
|
||||
remoteAddress: remoteAddress as io_bits.InternetAddress?,
|
||||
errorHandler: _errorHandler,
|
||||
errorTransformer: _errorTransformer,
|
||||
onDataReceived: onDataReceived,
|
||||
)..handle();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue