/** * 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 #include namespace TetraRadio { // // DirectoryDispatcher // DirectoryDispatcher::DirectoryDispatcher(const std::shared_ptr &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(m_txDir); m_xdrDirHandler->startWatching(); return true; } std::shared_ptr 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