Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+233
@@ -0,0 +1,233 @@
|
||||
/**
|
||||
* Handler for all exercise objects
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Malte Diers, SLSE, 2017-04-05
|
||||
*/
|
||||
|
||||
#include "handler_recon_area.h"
|
||||
#include <Services/AreaEffectSimulation/Utils/polygons.h>
|
||||
#include <QPolygonF>
|
||||
|
||||
namespace AreaEffectSimulation
|
||||
{
|
||||
|
||||
HandlerReconArea::HandlerReconArea(MainHandler *mainHandler)
|
||||
: HandlerBase(mainHandler, QStringLiteral("ReconArea"))
|
||||
, Interface::Fts::ReconAreaModifyRequestHandler(mainHandler->dds()->fts())
|
||||
, Interface::Fts::ReconAreaRemoveRequestHandler(mainHandler->dds()->fts())
|
||||
{
|
||||
}
|
||||
|
||||
bool HandlerReconArea::init()
|
||||
{
|
||||
QVector<Database::AesReconArea> dataVec;
|
||||
// read all ReconAreas from database
|
||||
if (!m_mainHandler->db()->select(dataVec))
|
||||
{
|
||||
ERROR_LOG(m_logger) << "Error reading data from database!";
|
||||
return false;
|
||||
}
|
||||
|
||||
// create Recon area objects
|
||||
for (const Database::AesReconArea &dbData : qAsConst(dataVec))
|
||||
{
|
||||
ObjectReconArea *ifs(new ObjectReconArea(m_mainHandler, this));
|
||||
connect(ifs, &ObjectReconArea::effectStateChanged, this, &HandlerReconArea::onEffectStateChanged);
|
||||
Core::FunctionReplyObject ret = ifs->createObject(dbData);
|
||||
if (ret.error())
|
||||
{
|
||||
delete ifs;
|
||||
ERROR_LOG(m_logger) << ret();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_objectMap.insert(ifs->id(), ifs);
|
||||
connect(ifs, &ObjectReconArea::newAiv, this, &HandlerReconArea::newAiv);
|
||||
connect(ifs, &ObjectReconArea::removeAiv, this, &HandlerReconArea::removeAiv);
|
||||
}
|
||||
|
||||
DEBUG_LOG(m_logger) << "m_exeObjMap.size() = " << m_objectMap.size();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void fillData(const ReconAreaModifyRequest &src, Database::AesReconArea &dst)
|
||||
{
|
||||
dst.name = QString::fromStdString(src.name());
|
||||
dst.chargeTypeId = 103; // recon area dummy
|
||||
dst.effectDuration = 0; // forever active
|
||||
dst.position.rx() = src.area().cornerBottomLeft().lon();
|
||||
dst.position.ry() = src.area().cornerBottomLeft().lat();
|
||||
dst.rotationAngle = src.area().rotation();
|
||||
dst.height = src.area().height();
|
||||
dst.width = src.area().width();
|
||||
dst.effectMarkingInTa = false;
|
||||
dst.effectStart = src.effectStart().is_set() ? QDateTime::fromMSecsSinceEpoch(src.effectStart().get()) : QDateTime();
|
||||
dst.participantId = src.participantId();
|
||||
dst.partyId = src.partyId().is_set() ? src.partyId().get() : 0;
|
||||
dst.purpose = QString::fromStdString(src.purpose());
|
||||
}
|
||||
|
||||
void HandlerReconArea::onReconAreaModifyRequest(const rti::core::SampleIdentity &cookie,
|
||||
const ReconAreaModifyRequest &request)
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "onReconAreaModifyRequest: " << request;
|
||||
Core::FunctionReplyObject ret = reconAreaModifyRequest(request);
|
||||
if (ret.error())
|
||||
WARNING_LOG(m_logger) << ret();
|
||||
m_mainHandler->dds()->fts()->reconAreaModifyReply(cookie, ret);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::reconAreaCreateRequest(const ReconAreaModifyRequest &request)
|
||||
{
|
||||
Database::AesReconArea newData;
|
||||
fillData(request, newData);
|
||||
|
||||
// set time contrain outside of fillData
|
||||
// newData.effectStart = QDateTime::fromMSecsSinceEpoch(m_mainHandler->dds()->currentPartitionTimeMSec() + 100); // now active
|
||||
|
||||
ObjectReconArea *ifs(new ObjectReconArea(m_mainHandler, this));
|
||||
connect(ifs, &ObjectReconArea::effectStateChanged, this, &HandlerReconArea::onEffectStateChanged);
|
||||
const Core::FunctionReplyObject ret = ifs->createObject(newData);
|
||||
if (ret.error())
|
||||
{
|
||||
delete ifs;
|
||||
ifs = nullptr;
|
||||
return ret;
|
||||
}
|
||||
m_objectMap.insert(ifs->id(), ifs);
|
||||
if (ifs->isObjectInTrainingArea())
|
||||
{
|
||||
++s_areaCount[AesType::AtReconArea];
|
||||
DEBUG_LOG(m_logger) << "s_areaCount[AesType::AtReconArea] = " << s_areaCount[AesType::AtReconArea];
|
||||
}
|
||||
connect(ifs, &ObjectReconArea::newAiv, this, &HandlerReconArea::newAiv);
|
||||
connect(ifs, &ObjectReconArea::removeAiv, this, &HandlerReconArea::removeAiv);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::reconAreaModifyRequest(const ReconAreaModifyRequest &request)
|
||||
{
|
||||
if (request.id() <= 0)
|
||||
return reconAreaCreateRequest(request);
|
||||
|
||||
Core::FunctionReplyObject ret;
|
||||
ObjectReconArea *ifs = getObjectFromMap(m_objectMap, request.id(), ret);
|
||||
if (!ifs)
|
||||
return ret;
|
||||
|
||||
// Todo: IsObjectModifiable() ?!?
|
||||
|
||||
AreaEffectSimulation::Database::AesReconArea aea(ifs->data());
|
||||
fillData(request, aea);
|
||||
|
||||
return ifs->updateObject(aea);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::reconAreaModifyGeometryRequest(const ReconAreaModifyRequest &request)
|
||||
{
|
||||
// WARNING: request.area.cornerBottomLeft() contains center point!
|
||||
Core::FunctionReplyObject ret;
|
||||
ObjectReconArea *ifs = getObjectFromMap(m_objectMap, request.id(), ret);
|
||||
if (!ifs)
|
||||
return ret;
|
||||
|
||||
// Todo: IsObjectModifiable() ?!?
|
||||
|
||||
AreaEffectSimulation::Database::AesReconArea aea(ifs->data());
|
||||
aea.position = Polygons::centerPoint2BottomLeft(QPointF(request.area().cornerBottomLeft().lon(),
|
||||
request.area().cornerBottomLeft().lat()),
|
||||
ifs->data().width,
|
||||
ifs->data().height,
|
||||
request.area().rotation());
|
||||
aea.rotationAngle = request.area().rotation();
|
||||
|
||||
return ifs->updateObject(aea);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::removeObject(int id)
|
||||
{
|
||||
ObjectReconArea *ifs = m_objectMap.value(id);
|
||||
if (ifs == nullptr)
|
||||
return Core::FunctionReplyObject(id, tr_lts("dds", "Recon area with id %1 not found.")).arg(id);
|
||||
|
||||
return ifs->removeObject();
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::switchTo(int id, AesEffectState effectState)
|
||||
{
|
||||
ObjectReconArea *ifs = m_objectMap.value(id);
|
||||
if (ifs == nullptr)
|
||||
return Core::FunctionReplyObject(id, tr_lts("dds", "Recon area with id %1 not found.")).arg(id);
|
||||
|
||||
bool succ = false;
|
||||
switch (effectState.underlying()) {
|
||||
case AesEffectState_def::EsActivated:
|
||||
succ = !ifs->activateObjectNow().error();
|
||||
break;
|
||||
case AesEffectState_def::EsPrepared:
|
||||
succ = ifs->trySwitchToPrepared();
|
||||
break;
|
||||
case AesEffectState_def::EsPaused:
|
||||
succ = ifs->trySwitchToPaused();
|
||||
break;
|
||||
case AesEffectState_def::EsExpired:
|
||||
succ = ifs->trySwitchToExpired();
|
||||
break;
|
||||
case AesEffectState_def::EsRemoved:
|
||||
succ = ifs->trySwitchToRemoved();
|
||||
break;
|
||||
case AesEffectState_def::EsCreated:
|
||||
succ = ifs->trySwitchToCreated();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (succ)
|
||||
return Core::FunctionReplyObject();
|
||||
return Core::FunctionReplyObject(id, tr_lts("dds", "Could not switch effect simulation with id %1 to state with id %2.")).arg(id).arg(effectState.underlying());
|
||||
}
|
||||
|
||||
void HandlerReconArea::onReconAreaRemoveRequest(const rti::core::SampleIdentity &cookie,
|
||||
const Core::RemoveElementRequest &request)
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "onReconAreaRemoveRequest: " << request;
|
||||
Core::FunctionReplyObject ret;
|
||||
ObjectReconArea *ifs = getObjectFromMap(m_objectMap, request.id(), ret);
|
||||
if (!ifs)
|
||||
{
|
||||
m_mainHandler->dds()->fts()->reconAreaRemoveReply(cookie, ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = ifs->removeObject();
|
||||
if (ret.error())
|
||||
{
|
||||
ERROR_LOG(m_logger) << ret();
|
||||
}
|
||||
|
||||
m_mainHandler->dds()->fts()->reconAreaRemoveReply(cookie, ret);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::activateObjectOffset(int id, qint64 msecs)
|
||||
{
|
||||
ObjectReconArea *ifs = m_objectMap.value(id);
|
||||
if (ifs == nullptr)
|
||||
return Core::FunctionReplyObject(id, tr_lts("dds", "Recon area with id %1 not found.")).arg(id);
|
||||
return ifs->setActivationOffset(msecs);
|
||||
}
|
||||
|
||||
Core::FunctionReplyObject HandlerReconArea::modifyPartyParticipant(qint32 itemId, qint32 partyId, qint32 participantId)
|
||||
{
|
||||
ObjectReconArea *ifs = m_objectMap.value(itemId);
|
||||
if (!ifs)
|
||||
return Core::FunctionReplyObject(itemId, tr_lts("dds", "Recon area with id %1 not found.")).arg(itemId);
|
||||
AreaEffectSimulation::Database::AesReconArea aea(ifs->data());
|
||||
aea.partyId = partyId;
|
||||
aea.participantId= participantId;
|
||||
return ifs->updateObject(aea);
|
||||
}
|
||||
|
||||
} // Namespace AreaEffectSimulation
|
||||
Reference in new issue
Block a user