Moved service management down to middleware implementation. Added a
authorPhilip Rauwolf <rauwolf@itestra.de>
Fri, 1 Mar 2013 09:52:37 +0000 (10:52 +0100)
committerPhilip Rauwolf <rauwolf@itestra.de>
Fri, 1 Mar 2013 09:52:37 +0000 (10:52 +0100)
variant for service-deregistration for splitted CommonAPI Addresses.

src/CommonAPI/Factory.h
src/CommonAPI/Stub.h

index bacda21..47dda82 100644 (file)
@@ -105,24 +105,11 @@ class Factory {
                                 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;
@@ -133,14 +120,15 @@ class Factory {
                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;
@@ -150,11 +138,10 @@ class Factory {
 
  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_;
 
index 740cc7a..7353f54 100644 (file)
@@ -21,8 +21,6 @@ class StubAdapter {
     virtual const std::string& getDomain() const = 0;
     virtual const std::string& getServiceId() const = 0;
     virtual const std::string& getInstanceId() const = 0;
-
-    virtual void deinit() = 0;
 };
 
 struct StubBase {
@@ -39,7 +37,6 @@ class Stub : public StubBase {
        virtual ~Stub() { }
 
        virtual _StubRemoteEventHandler* initStubAdapter(const std::shared_ptr<_StubAdapter>& stubAdapter) = 0;
-    virtual void deinitStubAdapter() = 0;
 };
 
 } // namespace CommonAPI