69 lines
3.9 KiB
C++
69 lines
3.9 KiB
C++
//
|
|
// Created by xtkuang on 2025/6/6.
|
|
//
|
|
|
|
#ifndef GRPC_SYSTEM_SERVICE_H
|
|
#define GRPC_SYSTEM_SERVICE_H
|
|
|
|
#include <chrono>
|
|
#include <memory>
|
|
|
|
#include "cmvr/api/system_service.grpc.pb.h"
|
|
#include "common/base/grpc_utils.h"
|
|
#include "manager/device_manager/include/device_manager.h"
|
|
|
|
namespace cmvr::service
|
|
{
|
|
class ActionQueueExecutor;
|
|
class RecoveryAuditSink;
|
|
class GrpcSafetyParticipantRegistration;
|
|
class GrpcSecurityGateway;
|
|
class StopOperationDispatcher;
|
|
|
|
class gRPCSystemServiceImpl: public api::SystemService::Service {
|
|
public:
|
|
gRPCSystemServiceImpl();
|
|
explicit gRPCSystemServiceImpl(
|
|
std::chrono::milliseconds stop_timeout);
|
|
explicit gRPCSystemServiceImpl(
|
|
std::shared_ptr<GrpcSecurityGateway> security_gateway);
|
|
gRPCSystemServiceImpl(
|
|
std::chrono::milliseconds stop_timeout,
|
|
std::shared_ptr<GrpcSecurityGateway> security_gateway);
|
|
gRPCSystemServiceImpl(
|
|
std::chrono::milliseconds stop_timeout,
|
|
std::shared_ptr<GrpcSecurityGateway> security_gateway,
|
|
std::shared_ptr<RecoveryAuditSink> recovery_audit_sink);
|
|
~gRPCSystemServiceImpl() override;
|
|
// Exposed only to synchronize lifecycle concurrency tests.
|
|
static bool waitForStopDispatcherDestructionForTesting(
|
|
std::chrono::milliseconds timeout);
|
|
// Called by GrpcServerTask before grpc::Server::Shutdown so accepted
|
|
// ActionQueue handlers can reach a terminal result and do not hold the
|
|
// synchronous server shutdown open indefinitely.
|
|
void prepareForShutdown();
|
|
grpc::Status GetSystemInfo(grpc::ServerContext* context, const api::GetSystemInfoCommand_Request* request, api::GetSystemInfoCommand_Feedback* response) override;
|
|
grpc::Status GetSystemStatus(grpc::ServerContext* context, const api::GetSystemStatusCommand_Request* request, api::GetSystemStatusCommand_Feedback* response) override;
|
|
grpc::Status GetDeviceList(grpc::ServerContext* context, const api::GetDeviceListCommand_Request* request, api::GetDeviceListCommand_Feedback* response) override;
|
|
grpc::Status UpdateParams(grpc::ServerContext* context, const cmvr::api::UpdateParamsCommand_Request* request, cmvr::api::UpdateParamsCommand_Feedback* response) override;
|
|
grpc::Status StopAll(grpc::ServerContext* context, const cmvr::api::StopAllCommand_Request* request, cmvr::api::StopAllCommand_Feedback* response) override;
|
|
grpc::Status ExecuteActionQueue(grpc::ServerContext* context, const cmvr::api::ActionQueueCommand_Request* request, cmvr::api::ActionQueueCommand_Feedback* response) override;
|
|
grpc::Status GetSafetyState(grpc::ServerContext* context, const cmvr::api::GetSafetyStateCommand_Request* request, cmvr::api::GetSafetyStateCommand_Feedback* response) override;
|
|
grpc::Status RecoverSafetyState(grpc::ServerContext* context, const cmvr::api::RecoverSafetyStateCommand_Request* request, cmvr::api::RecoverSafetyStateCommand_Feedback* response) override;
|
|
grpc::Status RestoreOperationalState(grpc::ServerContext* context, const cmvr::api::RestoreOperationalStateCommand_Request* request, cmvr::api::RestoreOperationalStateCommand_Feedback* response) override;
|
|
private:
|
|
device::DeviceManager& dmgr_;
|
|
const std::chrono::milliseconds stop_timeout_;
|
|
std::shared_ptr<GrpcSecurityGateway> security_gateway_;
|
|
std::shared_ptr<RecoveryAuditSink> recovery_audit_sink_;
|
|
// Process instances share running jobs through a lifecycle registry.
|
|
// The last service owner joins every worker before replacement.
|
|
std::shared_ptr<StopOperationDispatcher> stop_dispatcher_;
|
|
std::shared_ptr<ActionQueueExecutor> action_queue_;
|
|
std::unique_ptr<GrpcSafetyParticipantRegistration>
|
|
safety_participant_registration_;
|
|
};
|
|
}
|
|
|
|
#endif //GRPC_SYSTEM_SERVICE_H
|