Skip to content

Commit

Permalink
Add auxiliary API for Proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
Vitalii Arteev committed Oct 14, 2020
1 parent 63e4de6 commit 49e8038
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/ipc/ipc-common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ facelift_add_library(FaceliftIPCCommonLib
SerializeParameterFunction.h
StaticArrayReference.h
ipc-common.h
observer.h
LINK_LIBRARIES FaceliftModelLib FaceliftCommonLib
MONOLITHIC_SUPPORTED
)
12 changes: 10 additions & 2 deletions src/ipc/ipc-common/IPCProxyBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -54,7 +54,15 @@ class IPCProxyBase : public AdapterType, protected IPCProxyBaseBase
IPCProxyBase(QObject *parent) : AdapterType(parent)
{
}

// Set observers
void setObservers(std::vector<IObserver *> &observers){
for(auto observer: observers){
auto connection = std::make_shared<QMetaObject::Connection>();
*connection = QObject::connect(this, &InterfaceBase::readyChanged, observer, [observer, connection](){
observer->onReadyChanged( connection );
});
}
}
template<typename BinderType>
void initBinder(BinderType &binder)
{
Expand Down
72 changes: 72 additions & 0 deletions src/ipc/ipc-common/observer.h
Original file line number Diff line number Diff line change
@@ -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 <memory>
#include <QObject>

namespace facelift {

class IObserver : public QObject
{
Q_OBJECT
public:
virtual void onReadyChanged(std::shared_ptr<QMetaObject::Connection> connection ) = 0;
};

// Single-time observer which will unregister itself when done
template<typename Function>
class SingleTimeObserver : public IObserver
{
Function m_func;
public:
explicit SingleTimeObserver(Function func): m_func{func} {}
~SingleTimeObserver()=default;

void onReadyChanged(std::shared_ptr<QMetaObject::Connection> connection) override {
m_func();
QObject::disconnect(*connection);
}
};
// Standard observer which will work for each signal
template<typename Function>
class StandartObserver : public IObserver
{
Function m_func;
public:
explicit StandartObserver(Function func): m_func{func} {}
~StandartObserver()=default;

void onReadyChanged(std::shared_ptr<QMetaObject::Connection> connection ) override {
Q_UNUSED(connection)
m_func();
}
};
}

0 comments on commit 49e8038

Please sign in to comment.