From 49e8038b8ea22c540507c5c10a7f38a17687d980 Mon Sep 17 00:00:00 2001 From: Vitalii Arteev Date: Wed, 14 Oct 2020 17:35:24 +0200 Subject: [PATCH] Add auxiliary API for Proxy --- src/ipc/ipc-common/CMakeLists.txt | 1 + src/ipc/ipc-common/IPCProxyBase.h | 12 +++++- src/ipc/ipc-common/observer.h | 72 +++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/ipc/ipc-common/observer.h diff --git a/src/ipc/ipc-common/CMakeLists.txt b/src/ipc/ipc-common/CMakeLists.txt index 42413c67..f0cd1417 100644 --- a/src/ipc/ipc-common/CMakeLists.txt +++ b/src/ipc/ipc-common/CMakeLists.txt @@ -48,6 +48,7 @@ facelift_add_library(FaceliftIPCCommonLib SerializeParameterFunction.h StaticArrayReference.h ipc-common.h + observer.h LINK_LIBRARIES FaceliftModelLib FaceliftCommonLib MONOLITHIC_SUPPORTED ) diff --git a/src/ipc/ipc-common/IPCProxyBase.h b/src/ipc/ipc-common/IPCProxyBase.h index 25701b8d..5a710274 100644 --- a/src/ipc/ipc-common/IPCProxyBase.h +++ b/src/ipc/ipc-common/IPCProxyBase.h @@ -33,7 +33,7 @@ #include "ipc-common.h" #include "IPCProxyBaseBase.h" #include "IPCProxyBinderBase.h" - +#include "observer.h" #if defined(FaceliftIPCCommonLib_LIBRARY) # define FaceliftIPCCommonLib_EXPORT Q_DECL_EXPORT @@ -54,7 +54,15 @@ class IPCProxyBase : public AdapterType, protected IPCProxyBaseBase IPCProxyBase(QObject *parent) : AdapterType(parent) { } - + // Set observers + void setObservers(std::vector &observers){ + for(auto observer: observers){ + auto connection = std::make_shared(); + *connection = QObject::connect(this, &InterfaceBase::readyChanged, observer, [observer, connection](){ + observer->onReadyChanged( connection ); + }); + } + } template void initBinder(BinderType &binder) { diff --git a/src/ipc/ipc-common/observer.h b/src/ipc/ipc-common/observer.h new file mode 100644 index 00000000..a52b2308 --- /dev/null +++ b/src/ipc/ipc-common/observer.h @@ -0,0 +1,72 @@ +/********************************************************************** +** +** Copyright (C) 2020 Luxoft Sweden AB +** +** This file is part of the FaceLift project +** +** Permission is hereby granted, freIPCServiceAdapterBasee of charge, to any person +** obtaining a copy of this software and associated documentation files +** (the "Software"), to deal in the Software without restriction, +** including without limitation the rights to use, copy, modify, merge, +** publish, distribute, sublicense, and/or sell copies of the Software, +** and to permit persons to whom the Software is furnished to do so, +** subject to the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +** BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +** ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +** SOFTWARE. +** +** SPDX-License-Identifier: MIT +** +**********************************************************************/ +#pragma once + +#include +#include + +namespace facelift { + +class IObserver : public QObject +{ + Q_OBJECT +public: + virtual void onReadyChanged(std::shared_ptr connection ) = 0; +}; + +// Single-time observer which will unregister itself when done +template +class SingleTimeObserver : public IObserver +{ + Function m_func; +public: + explicit SingleTimeObserver(Function func): m_func{func} {} + ~SingleTimeObserver()=default; + + void onReadyChanged(std::shared_ptr connection) override { + m_func(); + QObject::disconnect(*connection); + } +}; +// Standard observer which will work for each signal +template +class StandartObserver : public IObserver +{ + Function m_func; +public: + explicit StandartObserver(Function func): m_func{func} {} + ~StandartObserver()=default; + + void onReadyChanged(std::shared_ptr connection ) override { + Q_UNUSED(connection) + m_func(); + } +}; +}