resolve method
Resolve the incoming message packet.
Implementation
@override
void resolve() {
if (resolvedAlready) {
return;
}
for (final module in config.modulesContainer.scopes) {
for (final controllerEntry in module.controllers.whereType<GrpcController>()) {
for (final entry in controllerEntry.grpcRoutes.entries) {
if (resolvedMessageRoutes.containsKey(entry.value.route.path)) {
throw StateError(
'A message route with pattern "${entry.value.route.path}" is already registered in the application.',
);
}
final service = entry.value.route.path.split('.').first;
final serviceNames = services.map((e) => e.runtimeType.toString());
if (!serviceNames.contains(service)) {
throw StateError(
'Service "$service" for gRPC route "${entry.value.route.path}" is not registered in the gRPC server.',
);
}
switch (entry.value) {
case GrpcRouteHandlerSpec():
resolvedMessageRoutes[entry.value.route.path] = GrpcRouteContextHandler(
handler: entry.value.handler,
providers: {
for (final providerEntry in module.providers) providerEntry.runtimeType: providerEntry,
},
hooks: entry.value.route.hooks.merge([
controllerEntry.hooks,
config.globalHooks,
]),
pipes: {
...entry.value.route.pipes,
...controllerEntry.pipes,
...config.globalPipes,
},
exceptionFilters: {
...entry.value.route.exceptionFilters,
...controllerEntry.exceptionFilters,
...config.globalExceptionFilters,
},
);
break;
case GrpcStreamRouteHandlerSpec():
resolvedMessageRoutes[entry.value.route.path] = GrpcRouteContextStreamHandler(
handler: entry.value.handler,
providers: {
for (final providerEntry in module.providers) providerEntry.runtimeType: providerEntry,
},
hooks: entry.value.route.hooks.merge([
controllerEntry.hooks,
config.globalHooks,
]),
pipes: {
...entry.value.route.pipes,
...controllerEntry.pipes,
...config.globalPipes,
},
exceptionFilters: {
...entry.value.route.exceptionFilters,
...controllerEntry.exceptionFilters,
...config.globalExceptionFilters,
},
);
break;
default:
throw StateError(
'Unknown gRPC route handler type for route "${entry.value.route.path}".',
);
}
}
}
}
}