/
breton75
/
modus2
Обзор
Документация
Войти
/
breton75
/
modus2
Код
Запросы
0
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
framework/module/sv_module.cpp
169 строк
4 KB
s.sviridov
Update sv_abstract_module_io.cpp, sv_abstract_module_io.h, and 6 more files...
10 фев 2026, 18:06
10 фев 2026, 18:06
7b3fd08
Код
Авторство
О чём код?
#include "sv_module.h" modus::ModuleAdaptor::ModuleAdaptor(): m_config(module::Config()), m_module_io(nullptr), m_module_job(nullptr), // m_io_buffer(nullptr), m_last_error(QString()), m_isOpened(false) { } modus::ModuleAdaptor::~ModuleAdaptor() { emit stopAll(); if(m_module_job) delete m_module_job; if(m_module_io) delete m_module_io; } bool modus::ModuleAdaptor::init(const modus::module::Config& config) { try { // m_io_buffer = nullptr; m_config = config; // создаем объект ввода/вывода, если он определен в конфигурации (то есть если определена библиотека интерфейса) if(!m_config.io.lib.isEmpty()) { m_module_io = new modus::module::IOAdaptor(); if(!m_module_io->init(m_config)) //, m_io_buffer)) throw SvException(m_module_io->lastError()); // m_io_buffer = m_module_io->buffer(); } // создаем объект обработчик m_module_job = new modus::module::JobAdaptor(); if(!m_module_job->init(m_config)) //, m_io_buffer)) throw SvException(m_module_job->lastError()); return true; } catch (SvException& e) { if(m_module_job) delete m_module_job; if(m_module_io) delete m_module_io; m_last_error = e.error; return false; } } bool modus::ModuleAdaptor::bindSignal(modus::Signal* signal, signal::Binding binding) { Q_ASSERT(m_module_job); if(!m_module_job) { m_last_error = BIND_NOT_INITIALIZED(signal->config()->name, m_config.name); return false; } if(!m_module_job->bindSignal(signal, binding)) { m_last_error = m_module_job->lastError(); return false; } return true; } const modus::module::Config* modus::ModuleAdaptor::config() const { return &m_config; } bool modus::ModuleAdaptor::start() { Q_ASSERT(m_module_job); try { // запускаем обработчик if(!m_module_job) throw SvException(QString(ERROR_NOT_INITIALIZED).arg(m_config.name)); connect(this, &modus::ModuleAdaptor::stopAll, m_module_job, &modus::module::JobAdaptor::stop); if(!m_module_job->start()) throw SvException(m_module_job->lastError()); // если определен, то запускаем модуль ввода/вывода if(m_module_io) { connect(this, &modus::ModuleAdaptor::stopAll, m_module_io, &modus::module::IOAdaptor::stop); connect(m_module_job, &module::JobAdaptor::pauseIO, m_module_io, &modus::module::IOAdaptor::pause , Qt::QueuedConnection); connect(m_module_job, &module::JobAdaptor::resumeIO, m_module_io, &modus::module::IOAdaptor::resume, Qt::QueuedConnection); if(!m_module_io->start()) throw SvException(m_module_io->lastError()); connect(m_module_io->ioReference(), &modus::module::AbstractIO::dataReady, m_module_job->jobReference(), &modus::module::AbstractJob::onDataReady, Qt::QueuedConnection); connect(m_module_io->ioReference(), &modus::module::AbstractIO::dutyReady, m_module_job->jobReference(), &modus::module::AbstractJob::onDutyReady, Qt::QueuedConnection); connect(m_module_job->jobReference(), &modus::module::AbstractJob::dataReady, m_module_io->ioReference(), &modus::module::AbstractIO::onDataReady, Qt::QueuedConnection); connect(m_module_job->jobReference(), &modus::module::AbstractJob::dutyReady, m_module_io->ioReference(), &modus::module::AbstractIO::onDutyReady, Qt::QueuedConnection); } return true; } catch(SvException& e) { m_last_error = e.error; return false; } } void modus::ModuleAdaptor::deleteAllLoggers() { if(m_module_job) m_module_job->deleteLogger(); if(m_module_io) m_module_io ->deleteLogger(); } void modus::ModuleAdaptor::deleteIOLogger() { if(m_module_io) m_module_io ->deleteLogger(); } void modus::ModuleAdaptor::deleteJobLogger() { if(m_module_job) m_module_job->deleteLogger(); } void modus::ModuleAdaptor::createIOLogger() { if(m_module_io) m_module_io->createLogger(); } void modus::ModuleAdaptor::createJobLogger() { if(m_module_job) m_module_job->createLogger(); } void modus::ModuleAdaptor::stop() { emit stopAll(); } const QString modus::ModuleAdaptor::lastError() const { return m_last_error; }