Please see ../README.md for general information.
This daemon uses three IPC mechanisms:
wilco_dtc
daemon.`Daemon` ^ | v `Core` ^ | | // gRPC-related members: +-> `GrpcService` | (handles incoming gRPC requests) +-> `AsyncGrpcServer<grpc_api::WilcoDtcSupportd>` | (connects `GrpcService` with the actual gRPC | pipe) +-> `AsyncGrpcClient<grpc_api::WilcoDtc>` | (sends outgoing gRPC requests through the actual gRPC pipe) | | // Mojo-related members: +-> `MojoService` | (handles incoming Mojo requests and sends outgoing ones) +-> `mojo::Binding<mojom::WilcoDtcSupportdService>` | (connects `MojoService` with the actual Mojo pipe) +-> `RoutineService` | (handles diagnostics routines requests to cros_healthd) +-> `ProbeService` | (handles probe requests to cros_healthd) | | // D-Bus-related members: +-> `DBusService` | (handles incoming D-Bus requests) +-> `brillo::dbus_utils::DBusObject` (connects `DBusService` with the actual D-Bus pipe)
Classes are generally organized such that they don't know about their owners or siblings in this graph. Instead, these classes are parameterized with delegate(s), which implement these cross-class calls. This allows to test each individual piece of logic separately.