Files
qt5-legatus-legacy/Lts/Proxies/TrainingAreaBase/Plugins/DebugJsonDir/directory_dispatcher.cpp
T
2026-08-13 18:33:10 +02:00

83 lines
2.1 KiB
C++
Executable File

/**
* Send / Receive telegrams to/from TX/RX directory
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2016-09-26
*/
#include "directory_dispatcher.h"
#include "convert_to_json_file.h"
#include "directory_cleaner.h"
#include <XDR_QtHandler/XDR_DirHandler.h>
#include <QDir>
namespace TetraRadio
{
//
// DirectoryDispatcher
//
DirectoryDispatcher::DirectoryDispatcher(const std::shared_ptr<TrainingAreaBase::RecvFromTab> &recvFromTabCb,
const QString &txDir,
const QString &rxDir)
: TrainingAreaBase::Plugin::Interface()
, ConvertFromJson(recvFromTabCb, "TAB.Plugin.DirectoryDispatcher")
, m_xdrDirHandler(new XDR_DirHandler_emit(rxDir, this))
, m_txCleaner(new DirectoryCleaner(txDir, 10 * 60, this))
, m_txDir(txDir)
, m_rxDir(rxDir)
{
QFileInfo fi(m_txDir);
if (!fi.exists() || !fi.isDir())
{
QDir d;
if (!d.mkpath(m_txDir))
ERROR_LOG(m_logger) << "Can not create directory " << m_txDir;
}
fi = QFileInfo(m_rxDir);
if (!fi.exists() || !fi.isDir())
{
QDir d;
if (!d.mkpath(m_rxDir))
ERROR_LOG(m_logger) << "Can not create directory " << m_rxDir;
}
NOTICE_LOG(m_logger) << "Using RX dir: " << m_rxDir;
NOTICE_LOG(m_logger) << "Using TX dir: " << m_txDir;
connect(m_xdrDirHandler, &XDR_DirHandler_emit::newTelegram,
this, &DirectoryDispatcher::newTelegramArrived);
}
DirectoryDispatcher::~DirectoryDispatcher()
{
delete m_xdrDirHandler;
}
bool DirectoryDispatcher::init()
{
m_tx = std::make_shared<ConvertToJsonFile>(m_txDir);
m_xdrDirHandler->startWatching();
return true;
}
std::shared_ptr<TrainingAreaBase::SendToTab> DirectoryDispatcher::sendToTab()
{
return m_tx;
}
void DirectoryDispatcher::newTelegramArrived(const QString &fullPath)
{
DEBUG_LOG(m_logger) << "Got new telegram: "
<< fullPath;
QFile f(fullPath);
if (!f.open(QIODevice::ReadOnly))
return;
const QByteArray tele = f.readAll();
f.close();
int recvCounterUnused;
handleTelegram(tele, recvCounterUnused);
}
} // namespace TetraRadio