This commit is contained in:
momadvisor 2025-06-12 21:32:08 +09:00 committed by GitHub
commit 7aa59ebf0a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 1 deletions

View File

@ -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,

View File

@ -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();
}