/* Copyright (C) 2013 BMW Group * Author: Manfred Bathelt (manfred.bathelt@bmw.de) * Author: Juergen Gehring (juergen.gehring@bmw.de) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #if !defined (COMMONAPI_INTERNAL_COMPILATION) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef COMMONAPI_PROXY_MANAGER_H_ #define COMMONAPI_PROXY_MANAGER_H_ #include "types.h" #include "Event.h" #include "Proxy.h" #include "Factory.h" #include #include #include #include namespace CommonAPI { class ProxyManager { public: typedef std::function&)> GetAvailableInstancesCallback; typedef std::function GetInstanceAvailabilityStatusCallback; typedef Event InstanceAvailabilityStatusChangedEvent; ProxyManager() { }; ProxyManager(ProxyManager&&) = delete; ProxyManager(const ProxyManager&) = delete; virtual ~ProxyManager() { } virtual void getAvailableInstances(CommonAPI::CallStatus&, std::vector& availableInstances) = 0; virtual std::future getAvailableInstancesAsync(GetAvailableInstancesCallback callback) = 0; virtual void getInstanceAvailabilityStatus(const std::string& instanceAddress, CallStatus& callStatus, AvailabilityStatus& availabilityStatus) = 0; virtual std::future getInstanceAvailabilityStatusAsync(const std::string&, GetInstanceAvailabilityStatusCallback callback) = 0; virtual InstanceAvailabilityStatusChangedEvent& getInstanceAvailabilityStatusChangedEvent() = 0; template class _ProxyClass, typename ... _AttributeExtensions> std::shared_ptr< _ProxyClass< #ifdef WIN32 CommonAPI::WINDummyAttributeExtension, #endif _AttributeExtensions...> > buildProxy(const std::string& instanceName) { std::shared_ptr abstractMiddlewareProxy = createProxy(instanceName); if (abstractMiddlewareProxy) { auto returnProxy = std::make_shared< _ProxyClass< #ifdef WIN32 CommonAPI::WINDummyAttributeExtension, #endif _AttributeExtensions...> >(abstractMiddlewareProxy); return returnProxy; } return NULL; } template class _ProxyClass, template class _AttributeExtension> std::shared_ptr::class_t> buildProxyWithDefaultAttributeExtension(const std::string& instanceName) { std::shared_ptr abstractMiddlewareProxy = createProxy(instanceName); if (abstractMiddlewareProxy) { return std::make_shared::class_t>(abstractMiddlewareProxy); } return NULL; } protected: virtual std::shared_ptr createProxy(const std::string& instanceName) = 0; }; } // namespace CommonAPI #endif // COMMONAPI_PROXY_MANAGER_H_