handle method

Stream<R> handle(
  1. ServiceCall call,
  2. Stream<Q> requests,
  3. List<ServerInterceptor> interceptors
)

Implementation

Stream<R> handle(
  ServiceCall call,
  Stream<Q> requests,
  List<ServerInterceptor> interceptors,
) {
  var invoker = _createCall();

  for (final interceptor in interceptors.reversed) {
    final delegate = invoker;
    // invoker is actually reassigned in the same scope as the above function,
    // reassigning invoker in delegate is required to avoid an infinite
    // recursion
    invoker = (call, method, requests) =>
        interceptor.intercept<Q, R>(call, method, requests, delegate);
  }

  return invoker(call, this, requests);
}