diff options
Diffstat (limited to 'src/CommonAPI/ProxyManager.h')
-rw-r--r-- | src/CommonAPI/ProxyManager.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/CommonAPI/ProxyManager.h b/src/CommonAPI/ProxyManager.h new file mode 100644 index 0000000..e967852 --- /dev/null +++ b/src/CommonAPI/ProxyManager.h @@ -0,0 +1,80 @@ +/* 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 <CommonAPI/CommonAPI.h> 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 <functional> +#include <future> +#include <string> +#include <vector> + + +namespace CommonAPI { + +class ProxyManager { + public: + typedef std::function<void(const CallStatus&, const std::vector<std::string>&)> GetAvailableInstancesCallback; + typedef std::function<void(const CallStatus&, const AvailabilityStatus&)> GetInstanceAvailabilityStatusCallback; + + typedef Event<std::string, AvailabilityStatus> InstanceAvailabilityStatusChangedEvent; + + ProxyManager() { }; + ProxyManager(ProxyManager&&) = delete; + ProxyManager(const ProxyManager&) = delete; + + virtual ~ProxyManager() { } + + virtual void getAvailableInstances(CommonAPI::CallStatus&, std::vector<std::string>& availableInstances) = 0; + virtual std::future<CallStatus> getAvailableInstancesAsync(GetAvailableInstancesCallback callback) = 0; + + virtual void getInstanceAvailabilityStatus(const std::string& instanceAddress, + CallStatus& callStatus, + AvailabilityStatus& availabilityStatus) = 0; + + virtual std::future<CallStatus> getInstanceAvailabilityStatusAsync(const std::string&, + GetInstanceAvailabilityStatusCallback callback) = 0; + + virtual InstanceAvailabilityStatusChangedEvent& getInstanceAvailabilityStatusChangedEvent() = 0; + + template<template<typename ...> class _ProxyClass, typename ... _AttributeExtensions> + std::shared_ptr<_ProxyClass<_AttributeExtensions...> > + buildProxy(const std::string& instanceName) { + std::shared_ptr<Proxy> abstractMiddlewareProxy = createProxy(instanceName); + if (abstractMiddlewareProxy) { + return std::make_shared<_ProxyClass<_AttributeExtensions...>>(abstractMiddlewareProxy); + } + return NULL; + + } + + template <template<typename ...> class _ProxyClass, template<typename> class _AttributeExtension> + std::shared_ptr<typename DefaultAttributeProxyFactoryHelper<_ProxyClass, _AttributeExtension>::class_t> + buildProxyWithDefaultAttributeExtension(const std::string& instanceName) { + std::shared_ptr<Proxy> abstractMiddlewareProxy = createProxy(instanceName); + if (abstractMiddlewareProxy) { + return std::make_shared<typename DefaultAttributeProxyFactoryHelper<_ProxyClass, _AttributeExtension>::class_t>(abstractMiddlewareProxy); + } + return NULL; + } + + protected: + virtual std::shared_ptr<Proxy> createProxy(const std::string& instanceName) = 0; +}; + +} // namespace CommonAPI + +#endif // COMMONAPI_PROXY_MANAGER_H_ |