const std::string& domain) {
std::shared_ptr<StubBase> stubBase = std::dynamic_pointer_cast<StubBase>(stub);
- std::shared_ptr<CommonAPI::StubAdapter> stubAdapter = createAdapter(stubBase, _Stub::StubAdapterType::getInterfaceId(), participantId, serviceName, domain);
- if(!stubAdapter) {
- return false;
- }
-
- std::string address = domain + ":" + serviceName + ":" + participantId;
- registeredServices_.insert( {std::move(address), stubAdapter} );
-
- return true;
+ return registerAdapter(stubBase, _Stub::StubAdapterType::getInterfaceId(), participantId, serviceName, domain);
}
template<typename _Stub>
bool registerService(std::shared_ptr<_Stub> stub, const std::string& serviceAddress) {
-
- if(registeredServices_.find(serviceAddress) != registeredServices_.end()) {
- return false;
- }
-
std::string domain;
std::string serviceName;
std::string participantId;
return registerService<_Stub>(stub, participantId, serviceName, domain);
}
+ virtual bool unregisterService(const std::string& participantId, const std::string& serviceName, const std::string& domain) = 0;
inline bool unregisterService(const std::string& serviceAddress) {
- auto foundStubAdapter = registeredServices_.find(serviceAddress);
- if(foundStubAdapter != registeredServices_.end()) {
- std::shared_ptr<CommonAPI::StubAdapter> stubAdapter = foundStubAdapter->second;
- stubAdapter->deinit();
- return registeredServices_.erase(serviceAddress);
- }
- return false;
+ std::string domain;
+ std::string serviceName;
+ std::string participantId;
+ if(!splitValidAddress(serviceAddress, domain, serviceName, participantId)) {
+ return false;
+ }
+ return unregisterService(participantId, serviceName, domain);
}
virtual std::vector<std::string> getAvailableServiceInstances(const std::string& serviceName, const std::string& serviceDomainName = "local") = 0;
protected:
virtual std::shared_ptr<Proxy> createProxy(const char* interfaceId, const std::string& participantId, const std::string& serviceName, const std::string& domain) = 0;
- virtual std::shared_ptr<StubAdapter> createAdapter(std::shared_ptr<StubBase> stubBase, const char* interfaceId, const std::string& participantId, const std::string& serivceName, const std::string& domain) = 0;
+ virtual bool registerAdapter(std::shared_ptr<StubBase> stubBase, const char* interfaceId, const std::string& participantId, const std::string& serivceName, const std::string& domain) = 0;
private:
std::shared_ptr<Runtime> runtime_;
- std::unordered_map<std::string, std::shared_ptr<CommonAPI::StubAdapter>> registeredServices_;
const MiddlewareInfo* middlewareInfo_;