cmvr-es/cmvr-es/service/grpc/server/include/grpc_system_service.h

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