83 lines
2.1 KiB
C++
Executable File
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
|