Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+173
@@ -0,0 +1,173 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Handle aes filter data
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Christian Ehrlicher, SLSE, 2017-06-16
|
||||
*/
|
||||
|
||||
|
||||
#include "handler_active_apps.h"
|
||||
|
||||
#include "dds_handler.h"
|
||||
#include "main_handler.h"
|
||||
|
||||
namespace OperatorManagement
|
||||
{
|
||||
|
||||
HandlerActiveApps::HandlerActiveApps(MainHandler *mainHandler)
|
||||
: Interface::Fts::ActiveAppUpdateRequestHandler(mainHandler->dds()->fts())
|
||||
, Interface::Fts::ActiveAppRemoveRequestHandler(mainHandler->dds()->fts())
|
||||
, m_mainHandler(mainHandler)
|
||||
, m_logger(getLogger("HandlerActiveApps"))
|
||||
{
|
||||
}
|
||||
|
||||
HandlerActiveApps::~HandlerActiveApps()
|
||||
{
|
||||
cleanup();
|
||||
}
|
||||
|
||||
bool HandlerActiveApps::init()
|
||||
{
|
||||
// cleanup();
|
||||
|
||||
// broadcast startUpRequest
|
||||
// (all apps should re-register)
|
||||
ActiveApp startUpRequest(0, -1, -1, -1, -1, -1, 0);
|
||||
activeAppUpdateRequest(startUpRequest);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandlerActiveApps::cleanupOperator(int operatorId)
|
||||
{
|
||||
INFO_LOG(m_logger) << "cleanupOperator operatorId: " << operatorId
|
||||
<< ", m_activeApps.size = " << m_activeApps.size();
|
||||
|
||||
// Operator has logged in or out or WS is not alive anymore:
|
||||
|
||||
auto dtsPtr = dts();
|
||||
auto it = m_activeApps.begin();
|
||||
while (it != m_activeApps.end())
|
||||
{
|
||||
const ActiveApp &item = it.value();
|
||||
if (item.operatorId() == operatorId)
|
||||
{
|
||||
INFO_LOG(m_logger) << "cleanupOperator operatorId: " << operatorId << " ActiveApp=" << item;
|
||||
dtsPtr->removeActiveAppByKey(item.id());
|
||||
it = m_activeApps.erase(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
} // while
|
||||
}
|
||||
|
||||
void HandlerActiveApps::cleanup()
|
||||
{
|
||||
auto dtsPtr = dts();
|
||||
for (const ActiveApp &item : qAsConst(m_activeApps))
|
||||
dtsPtr->removeActiveAppByKey(item.id());
|
||||
m_activeApps.clear();
|
||||
}
|
||||
|
||||
void HandlerActiveApps::removeZombieEntry(const ActiveApp &request)
|
||||
{
|
||||
for (auto it = m_activeApps.begin(); it != m_activeApps.end(); ++it)
|
||||
{
|
||||
const ActiveApp &item = it.value();
|
||||
if ((item.operatorId() == request.operatorId()) &&
|
||||
(item.screenId() == request.screenId()))
|
||||
{
|
||||
dts()->removeActiveAppByKey(item.id());
|
||||
m_activeApps.erase(it);
|
||||
break;
|
||||
}
|
||||
} // while
|
||||
}
|
||||
|
||||
void HandlerActiveApps::onActiveAppUpdateRequest(const rti::core::SampleIdentity &cookie,
|
||||
const ActiveApp &request)
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "onActiveAppUpdateRequest: " << request;
|
||||
auto ret = activeAppUpdateRequest(request);
|
||||
if (ret.error())
|
||||
WARNING_LOG(m_logger) << ret();
|
||||
DEBUG_LOG(m_logger) << "onActiveAppUpdateRequest - returned id: " << ret.id();
|
||||
fts()->activeAppUpdateReply(cookie, ret);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerActiveApps::activeAppUpdateRequest(const ActiveApp &request)
|
||||
{
|
||||
const int reqId = request.id();
|
||||
|
||||
// handle 'remove' :
|
||||
if (request.appId() < 0) // LtsSession::App::Login is -1 but ok
|
||||
{
|
||||
Core::RemoveElementRequest removeRequest;
|
||||
removeRequest.id(reqId);
|
||||
return activeAppRemoveRequest(removeRequest);
|
||||
}
|
||||
// : handle 'remove'
|
||||
|
||||
|
||||
auto it = m_activeApps.find(reqId);
|
||||
if (it == m_activeApps.end())
|
||||
{
|
||||
static int s_idCounter = 99;
|
||||
// new entry
|
||||
removeZombieEntry(request);
|
||||
|
||||
it = m_activeApps.insert(++s_idCounter, request);
|
||||
it.value().id(s_idCounter);
|
||||
}
|
||||
else
|
||||
{
|
||||
// already exists
|
||||
if (it.value() == request)
|
||||
{
|
||||
// identical value, already registered:
|
||||
return Core::FunctionReplyObject(reqId);
|
||||
}
|
||||
// copy data
|
||||
it.value() = request;
|
||||
}
|
||||
DEBUG_LOG(m_logger) << "onActiveAppUpdateRequest - publish new data: " << it.value();
|
||||
dts()->publish(it.value());
|
||||
return Core::FunctionReplyObject(it.value().id());
|
||||
}
|
||||
|
||||
void HandlerActiveApps::onActiveAppRemoveRequest(const rti::core::SampleIdentity &cookie,
|
||||
const Core::RemoveElementRequest &request)
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "onActiveAppRemoveRequest: " << request;
|
||||
auto ret = activeAppRemoveRequest(request);
|
||||
if (ret.error())
|
||||
WARNING_LOG(m_logger) << ret();
|
||||
fts()->activeAppRemoveReply(cookie, ret);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerActiveApps::activeAppRemoveRequest(const Core::RemoveElementRequest &request)
|
||||
{
|
||||
const int reqId = request.id();
|
||||
if (m_activeApps.remove(reqId) <= 0)
|
||||
return Core::FunctionReplyObject(reqId, tr_lts("dds", "ActiveApp with id %1 not found")).arg(reqId);
|
||||
|
||||
dts()->removeActiveAppByKey(reqId);
|
||||
return Core::FunctionReplyObject(reqId);
|
||||
}
|
||||
|
||||
std::shared_ptr<Interface::Dts> HandlerActiveApps::dts() const
|
||||
{
|
||||
return m_mainHandler->dds()->dts();
|
||||
}
|
||||
|
||||
std::shared_ptr<Interface::Fts> HandlerActiveApps::fts() const
|
||||
{
|
||||
return m_mainHandler->dds()->fts();
|
||||
}
|
||||
|
||||
} // namespace FilterManagement
|
||||
Reference in new issue
Block a user