#include "ability_sdk/AbilityStub.hpp" #include "conveyorBeltGrpcServer.h" #include #include class ConveyorBeltAbility : public ability_sdk::AbilityInterface { public: int g_abilityPort = 0; std::unique_ptr ability_server; std::unique_ptr ability_cq; // GRPC 服务端 void create_ability_server(); void onStart() override{ LOG(WARNING) << "OnStart"; } void onConnect() override { LOG(WARNING) << "OnConnect"; std::thread t_abilityserver(&ConveyorBeltAbility::create_ability_server, this); t_abilityserver.detach(); // 主线程轮询等待端口号更新 while (g_abilityPort == 0) { std::this_thread::sleep_for(std::chrono::milliseconds(2)); } LOG(WARNING) << "GRPC Server listening on port: "<< g_abilityPort; } void onDisconnect() override { LOG(WARNING) << "OnDisconnect"; ability_server->Shutdown(); ability_cq->Shutdown(); g_abilityPort = 0; } void onTerminate() override { LOG(WARNING) << "OnTerminate"; onDisconnect(); exit(0); } // 获取端口 int abilityPort() const override { return g_abilityPort; } void onSubabilityError(const ability_sdk::SubabilityErrorParam& param) override { LOG(INFO) << "onSubabilityError called in ConveyorBeltAbility"; } };