mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
refactor: Modernize Qt connections (#914)
This commit is contained in:
parent
d1a2b77ce3
commit
031b9a6b7c
@ -68,7 +68,7 @@ public:
|
|||||||
///
|
///
|
||||||
/// free all alocated objects, should be called only from constructor or before restarting hyperion
|
/// free all alocated objects, should be called only from constructor or before restarting hyperion
|
||||||
///
|
///
|
||||||
void freeObjects(bool emitCloseSignal=false);
|
void freeObjects();
|
||||||
|
|
||||||
ImageProcessor* getImageProcessor() const { return _imageProcessor; }
|
ImageProcessor* getImageProcessor() const { return _imageProcessor; }
|
||||||
|
|
||||||
@ -398,8 +398,6 @@ signals:
|
|||||||
///
|
///
|
||||||
void currentImage(const Image<ColorRgb> & image);
|
void currentImage(const Image<ColorRgb> & image);
|
||||||
|
|
||||||
void closing();
|
|
||||||
|
|
||||||
/// Signal which is emitted, when a new json message should be forwarded
|
/// Signal which is emitted, when a new json message should be forwarded
|
||||||
void forwardJsonMessage(QJsonObject);
|
void forwardJsonMessage(QJsonObject);
|
||||||
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
#ifndef SSDPDISCOVER_H
|
#ifndef SSDPDISCOVER_H
|
||||||
#define SSDPDISCOVER_H
|
#define SSDPDISCOVER_H
|
||||||
|
|
||||||
#include <utils/Logger.h>
|
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
|
#include <QMultiMap>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
|
class Logger;
|
||||||
class QUdpSocket;
|
class QUdpSocket;
|
||||||
|
|
||||||
enum class searchType{
|
enum class searchType{
|
||||||
@ -202,7 +203,7 @@ private:
|
|||||||
int _ssdpMaxWaitResponseTime;
|
int _ssdpMaxWaitResponseTime;
|
||||||
int _ssdpTimeout;
|
int _ssdpTimeout;
|
||||||
|
|
||||||
QMap<QString, SSDPService> _services;
|
QMultiMap<QString, SSDPService> _services;
|
||||||
|
|
||||||
QStringList _usnList;
|
QStringList _usnList;
|
||||||
QString _searchTarget;
|
QString _searchTarget;
|
||||||
|
@ -39,8 +39,8 @@ BoblightClientConnection::BoblightClientConnection(Hyperion* hyperion, QTcpSocke
|
|||||||
_locale.setNumberOptions(QLocale::OmitGroupSeparator | QLocale::RejectGroupSeparator);
|
_locale.setNumberOptions(QLocale::OmitGroupSeparator | QLocale::RejectGroupSeparator);
|
||||||
|
|
||||||
// connect internal signals and slots
|
// connect internal signals and slots
|
||||||
connect(_socket, SIGNAL(disconnected()), this, SLOT(socketClosed()));
|
connect(_socket, &QTcpSocket::disconnected, this, &BoblightClientConnection::socketClosed);
|
||||||
connect(_socket, SIGNAL(readyRead()), this, SLOT(readData()));
|
connect(_socket, &QTcpSocket::readyRead, this, &BoblightClientConnection::readData);
|
||||||
}
|
}
|
||||||
|
|
||||||
BoblightClientConnection::~BoblightClientConnection()
|
BoblightClientConnection::~BoblightClientConnection()
|
||||||
|
@ -28,9 +28,9 @@ BoblightServer::BoblightServer(Hyperion* hyperion,const QJsonDocument& config)
|
|||||||
Debug(_log, "Instance created");
|
Debug(_log, "Instance created");
|
||||||
|
|
||||||
// listen for component change
|
// listen for component change
|
||||||
connect(_hyperion, SIGNAL(compStateChangeRequest(hyperion::Components,bool)), this, SLOT(compStateChangeRequest(hyperion::Components,bool)));
|
connect(_hyperion, &Hyperion::compStateChangeRequest, this, &BoblightServer::compStateChangeRequest);
|
||||||
// listen new connection signal from server
|
// listen new connection signal from server
|
||||||
connect(_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
|
connect(_server, &QTcpServer::newConnection, this, &BoblightServer::newConnection);
|
||||||
|
|
||||||
// init
|
// init
|
||||||
handleSettingsUpdate(settings::BOBLSERVER, config);
|
handleSettingsUpdate(settings::BOBLSERVER, config);
|
||||||
@ -101,7 +101,7 @@ void BoblightServer::newConnection()
|
|||||||
_openConnections.insert(connection);
|
_openConnections.insert(connection);
|
||||||
|
|
||||||
// register slot for cleaning up after the connection closed
|
// register slot for cleaning up after the connection closed
|
||||||
connect(connection, SIGNAL(connectionClosed(BoblightClientConnection*)), this, SLOT(closedConnection(BoblightClientConnection*)));
|
connect(connection, &BoblightClientConnection::connectionClosed, this, &BoblightServer::closedConnection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ void BonjourServiceBrowser::browseForServiceType(const QString &serviceType)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
bonjourSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this);
|
bonjourSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this);
|
||||||
connect(bonjourSocket, SIGNAL(activated(int)), this, SLOT(bonjourSocketReadyRead()));
|
connect(bonjourSocket, &QSocketNotifier::activated, this, &BonjourServiceBrowser::bonjourSocketReadyRead);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ void BonjourServiceRegister::registerService(const BonjourRecord &record, quint1
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
bonjourSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this);
|
bonjourSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this);
|
||||||
connect(bonjourSocket, SIGNAL(activated(int)), this, SLOT(bonjourSocketReadyRead()));
|
connect(bonjourSocket, &QSocketNotifier::activated, this, &BonjourServiceRegister::bonjourSocketReadyRead);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ bool BonjourServiceResolver::resolveBonjourRecord(const BonjourRecord &record)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
bonjourSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this);
|
bonjourSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this);
|
||||||
connect(bonjourSocket, SIGNAL(activated(int)), this, SLOT(bonjourSocketReadyRead()));
|
connect(bonjourSocket, &QSocketNotifier::activated, this, &BonjourServiceResolver::bonjourSocketReadyRead);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -32,8 +32,8 @@ EffectEngine::EffectEngine(Hyperion * hyperion)
|
|||||||
qRegisterMetaType<hyperion::Components>("hyperion::Components");
|
qRegisterMetaType<hyperion::Components>("hyperion::Components");
|
||||||
|
|
||||||
// connect the Hyperion channel clear feedback
|
// connect the Hyperion channel clear feedback
|
||||||
connect(_hyperion, SIGNAL(channelCleared(int)), this, SLOT(channelCleared(int)));
|
connect(_hyperion, &Hyperion::channelCleared, this, &EffectEngine::channelCleared);
|
||||||
connect(_hyperion, SIGNAL(allChannelsCleared()), this, SLOT(allChannelsCleared()));
|
connect(_hyperion, &Hyperion::allChannelsCleared, this, &EffectEngine::allChannelsCleared);
|
||||||
|
|
||||||
// get notifications about refreshed effect list
|
// get notifications about refreshed effect list
|
||||||
connect(_effectFileHandler, &EffectFileHandler::effectListChanged, this, &EffectEngine::handleUpdatedEffectList);
|
connect(_effectFileHandler, &EffectFileHandler::effectListChanged, this, &EffectEngine::handleUpdatedEffectList);
|
||||||
|
@ -357,7 +357,7 @@ bool V4L2Grabber::open_device()
|
|||||||
// create the notifier for when a new frame is available
|
// create the notifier for when a new frame is available
|
||||||
_streamNotifier = new QSocketNotifier(_fileDescriptor, QSocketNotifier::Read);
|
_streamNotifier = new QSocketNotifier(_fileDescriptor, QSocketNotifier::Read);
|
||||||
_streamNotifier->setEnabled(false);
|
_streamNotifier->setEnabled(false);
|
||||||
connect(_streamNotifier, SIGNAL(activated(int)), this, SLOT(read_frame()));
|
connect(_streamNotifier, &QSocketNotifier::activated, this, &V4L2Grabber::read_frame);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ V4L2Wrapper::V4L2Wrapper(const QString &device,
|
|||||||
qRegisterMetaType<Image<ColorRgb>>("Image<ColorRgb>");
|
qRegisterMetaType<Image<ColorRgb>>("Image<ColorRgb>");
|
||||||
|
|
||||||
// Handle the image in the captured thread using a direct connection
|
// Handle the image in the captured thread using a direct connection
|
||||||
connect(&_grabber, SIGNAL(newFrame(Image<ColorRgb>)), this, SLOT(newFrame(Image<ColorRgb>)), Qt::DirectConnection);
|
connect(&_grabber, &V4L2Grabber::newFrame, this, &V4L2Wrapper::newFrame, Qt::DirectConnection);
|
||||||
connect(&_grabber, SIGNAL(readError(const char*)), this, SLOT(readError(const char*)), Qt::DirectConnection);
|
connect(&_grabber, &V4L2Grabber::readError, this, &V4L2Wrapper::readError, Qt::DirectConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
V4L2Wrapper::~V4L2Wrapper()
|
V4L2Wrapper::~V4L2Wrapper()
|
||||||
|
@ -39,7 +39,6 @@
|
|||||||
// Boblight
|
// Boblight
|
||||||
#include <boblightserver/BoblightServer.h>
|
#include <boblightserver/BoblightServer.h>
|
||||||
|
|
||||||
|
|
||||||
Hyperion::Hyperion(const quint8& instance)
|
Hyperion::Hyperion(const quint8& instance)
|
||||||
: QObject()
|
: QObject()
|
||||||
, _instIndex(instance)
|
, _instIndex(instance)
|
||||||
@ -61,7 +60,7 @@ Hyperion::Hyperion(const quint8& instance)
|
|||||||
|
|
||||||
Hyperion::~Hyperion()
|
Hyperion::~Hyperion()
|
||||||
{
|
{
|
||||||
freeObjects(false);
|
freeObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hyperion::start()
|
void Hyperion::start()
|
||||||
@ -152,16 +151,11 @@ void Hyperion::stop()
|
|||||||
thread()->wait();
|
thread()->wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hyperion::freeObjects(bool emitCloseSignal)
|
void Hyperion::freeObjects()
|
||||||
{
|
{
|
||||||
// switch off all leds
|
// switch off all leds
|
||||||
clear(-1,true);
|
clear(-1,true);
|
||||||
|
|
||||||
if (emitCloseSignal)
|
|
||||||
{
|
|
||||||
emit closing();
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete components on exit of hyperion core
|
// delete components on exit of hyperion core
|
||||||
delete _boblightServer;
|
delete _boblightServer;
|
||||||
delete _captureCont;
|
delete _captureCont;
|
||||||
|
@ -80,7 +80,6 @@ SettingsManager::SettingsManager(const quint8& instance, QObject* parent)
|
|||||||
saveSettings(dbConfig, true);
|
saveSettings(dbConfig, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// validate full dbconfig against schema, on error we need to rewrite entire table
|
// validate full dbconfig against schema, on error we need to rewrite entire table
|
||||||
QJsonSchemaChecker schemaChecker;
|
QJsonSchemaChecker schemaChecker;
|
||||||
schemaChecker.setSchema(schemaJson);
|
schemaChecker.setSchema(schemaJson);
|
||||||
|
@ -27,7 +27,7 @@ JsonServer::JsonServer(const QJsonDocument& config)
|
|||||||
Debug(_log, "Created instance");
|
Debug(_log, "Created instance");
|
||||||
|
|
||||||
// Set trigger for incoming connections
|
// Set trigger for incoming connections
|
||||||
connect(_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
|
connect(_server, &QTcpServer::newConnection, this, &JsonServer::newConnection);
|
||||||
|
|
||||||
// init
|
// init
|
||||||
handleSettingsUpdate(settings::JSONSERVER, config);
|
handleSettingsUpdate(settings::JSONSERVER, config);
|
||||||
|
@ -245,7 +245,7 @@ int LedDevice::writeBlack(int numberOfBlack)
|
|||||||
{
|
{
|
||||||
// Wait latch time before writing black
|
// Wait latch time before writing black
|
||||||
QEventLoop loop;
|
QEventLoop loop;
|
||||||
QTimer::singleShot( _latchTime_ms, &loop, SLOT( quit() ) );
|
QTimer::singleShot(_latchTime_ms, &loop, &QEventLoop::quit);
|
||||||
loop.exec();
|
loop.exec();
|
||||||
}
|
}
|
||||||
rc = write(std::vector<ColorRgb>(static_cast<unsigned long>(_ledCount), ColorRgb::BLACK ));
|
rc = write(std::vector<ColorRgb>(static_cast<unsigned long>(_ledCount), ColorRgb::BLACK ));
|
||||||
|
@ -128,7 +128,7 @@ httpResponse ProviderRestApi::get(const QUrl &url)
|
|||||||
QNetworkReply* reply = _networkManager->get(request);
|
QNetworkReply* reply = _networkManager->get(request);
|
||||||
// Connect requestFinished signal to quit slot of the loop.
|
// Connect requestFinished signal to quit slot of the loop.
|
||||||
QEventLoop loop;
|
QEventLoop loop;
|
||||||
loop.connect(reply, SIGNAL(finished()), SLOT(quit()));
|
loop.connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||||
// Go into the loop until the request is finished.
|
// Go into the loop until the request is finished.
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ httpResponse ProviderRestApi::put(const QUrl &url, const QString &body)
|
|||||||
QNetworkReply* reply = _networkManager->put(request, body.toUtf8());
|
QNetworkReply* reply = _networkManager->put(request, body.toUtf8());
|
||||||
// Connect requestFinished signal to quit slot of the loop.
|
// Connect requestFinished signal to quit slot of the loop.
|
||||||
QEventLoop loop;
|
QEventLoop loop;
|
||||||
loop.connect(reply, SIGNAL(finished()), SLOT(quit()));
|
loop.connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||||
// Go into the loop until the request is finished.
|
// Go into the loop until the request is finished.
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
|
||||||
|
@ -17,8 +17,6 @@ LedDevicePiBlaster::LedDevicePiBlaster(const QJsonObject &deviceConfig)
|
|||||||
|
|
||||||
_activeDeviceType = deviceConfig["type"].toString("UNSPECIFIED").toLower();
|
_activeDeviceType = deviceConfig["type"].toString("UNSPECIFIED").toLower();
|
||||||
|
|
||||||
signal(SIGPIPE, SIG_IGN);
|
|
||||||
|
|
||||||
// initialise the mapping tables
|
// initialise the mapping tables
|
||||||
// -1 is invalid
|
// -1 is invalid
|
||||||
// z is also meaningless
|
// z is also meaningless
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#include "LedDeviceAdalight.h"
|
#include "LedDeviceAdalight.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
LedDeviceAdalight::LedDeviceAdalight(const QJsonObject &deviceConfig)
|
LedDeviceAdalight::LedDeviceAdalight(const QJsonObject &deviceConfig)
|
||||||
: ProviderRs232()
|
: ProviderRs232()
|
||||||
, _headerSize(6)
|
, _headerSize(6)
|
||||||
@ -78,7 +80,9 @@ int LedDeviceAdalight::write(const std::vector<ColorRgb> & ledValues)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(_headerSize + _ledBuffer.data(), ledValues.data(), ledValues.size() * 3);
|
assert(_headerSize + ledValues.size() * sizeof(ColorRgb) <= _ledBuffer.size());
|
||||||
|
|
||||||
|
memcpy(_headerSize + _ledBuffer.data(), ledValues.data(), ledValues.size() * sizeof(ColorRgb));
|
||||||
}
|
}
|
||||||
|
|
||||||
int rc = writeBytes(_ledBuffer.size(), _ledBuffer.data());
|
int rc = writeBytes(_ledBuffer.size(), _ledBuffer.data());
|
||||||
|
@ -44,7 +44,7 @@ private:
|
|||||||
/// @return Zero on success, else negative
|
/// @return Zero on success, else negative
|
||||||
///
|
///
|
||||||
virtual int write(const std::vector<ColorRgb> & ledValues) override;
|
virtual int write(const std::vector<ColorRgb> & ledValues) override;
|
||||||
|
|
||||||
const short _headerSize;
|
const short _headerSize;
|
||||||
bool _ligthBerryAPA102Mode;
|
bool _ligthBerryAPA102Mode;
|
||||||
};
|
};
|
||||||
|
@ -50,7 +50,6 @@ int LedDeviceKarate::write(const std::vector<ColorRgb> &ledValues)
|
|||||||
{
|
{
|
||||||
for (signed iLed=0; iLed< static_cast<int>(_ledCount); iLed++)
|
for (signed iLed=0; iLed< static_cast<int>(_ledCount); iLed++)
|
||||||
{
|
{
|
||||||
|
|
||||||
const ColorRgb& rgb = ledValues[iLed];
|
const ColorRgb& rgb = ledValues[iLed];
|
||||||
_ledBuffer[iLed*3+4] = rgb.green;
|
_ledBuffer[iLed*3+4] = rgb.green;
|
||||||
_ledBuffer[iLed*3+5] = rgb.blue;
|
_ledBuffer[iLed*3+5] = rgb.blue;
|
||||||
|
@ -12,8 +12,7 @@
|
|||||||
// Constants
|
// Constants
|
||||||
constexpr std::chrono::milliseconds WRITE_TIMEOUT{1000}; // device write timeout in ms
|
constexpr std::chrono::milliseconds WRITE_TIMEOUT{1000}; // device write timeout in ms
|
||||||
constexpr std::chrono::milliseconds OPEN_TIMEOUT{5000}; // device open timeout in ms
|
constexpr std::chrono::milliseconds OPEN_TIMEOUT{5000}; // device open timeout in ms
|
||||||
const int MAX_WRITE_TIMEOUTS = 5; // maximum number of allowed timeouts
|
const int MAX_WRITE_TIMEOUTS = 5; // Maximum number of allowed timeouts
|
||||||
|
|
||||||
const int NUM_POWEROFF_WRITE_BLACK = 2; // Number of write "BLACK" during powering off
|
const int NUM_POWEROFF_WRITE_BLACK = 2; // Number of write "BLACK" during powering off
|
||||||
|
|
||||||
ProviderRs232::ProviderRs232()
|
ProviderRs232::ProviderRs232()
|
||||||
@ -43,9 +42,9 @@ bool ProviderRs232::init(const QJsonObject &deviceConfig)
|
|||||||
|
|
||||||
// If device name was given as unix /dev/ system-location, get port name
|
// If device name was given as unix /dev/ system-location, get port name
|
||||||
if ( _deviceName.startsWith(QLatin1String("/dev/")) )
|
if ( _deviceName.startsWith(QLatin1String("/dev/")) )
|
||||||
_deviceName = _deviceName.mid(5);
|
_deviceName = _deviceName.mid(5);
|
||||||
|
|
||||||
_isAutoDeviceName = _deviceName.toLower() == "auto";
|
_isAutoDeviceName = _deviceName.toLower() == "auto";
|
||||||
_baudRate_Hz = deviceConfig["rate"].toInt();
|
_baudRate_Hz = deviceConfig["rate"].toInt();
|
||||||
_delayAfterConnect_ms = deviceConfig["delayAfterConnect"].toInt(1500);
|
_delayAfterConnect_ms = deviceConfig["delayAfterConnect"].toInt(1500);
|
||||||
|
|
||||||
@ -174,7 +173,7 @@ bool ProviderRs232::tryOpen(const int delayAfterConnect_ms)
|
|||||||
|
|
||||||
// Wait delayAfterConnect_ms before allowing write
|
// Wait delayAfterConnect_ms before allowing write
|
||||||
QEventLoop loop;
|
QEventLoop loop;
|
||||||
QTimer::singleShot( delayAfterConnect_ms, &loop, SLOT( quit() ) );
|
QTimer::singleShot(delayAfterConnect_ms, &loop, &QEventLoop::quit);
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
|
||||||
Debug(_log, "delayAfterConnect for %d ms - finished", delayAfterConnect_ms);
|
Debug(_log, "delayAfterConnect for %d ms - finished", delayAfterConnect_ms);
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
#include <ssdp/SSDPDiscover.h>
|
#include <ssdp/SSDPDiscover.h>
|
||||||
|
|
||||||
|
#include <utils/Logger.h>
|
||||||
#include <utils/QStringUtils.h>
|
#include <utils/QStringUtils.h>
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QUdpSocket>
|
#include <QUdpSocket>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QJsonArray>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QtNetwork>
|
#include <QHostInfo>
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -117,8 +117,6 @@ HyperionDaemon::HyperionDaemon(const QString rootPath, QObject *parent, const bo
|
|||||||
// spawn all Hyperion instances (non blocking)
|
// spawn all Hyperion instances (non blocking)
|
||||||
_instanceManager->startAll();
|
_instanceManager->startAll();
|
||||||
|
|
||||||
//connect(_hyperion,SIGNAL(closing()),this,SLOT(freeObjects())); // TODO for app restart, refactor required
|
|
||||||
|
|
||||||
//Cleaning up Hyperion before quit
|
//Cleaning up Hyperion before quit
|
||||||
connect(parent, SIGNAL(aboutToQuit()), this, SLOT(freeObjects()));
|
connect(parent, SIGNAL(aboutToQuit()), this, SLOT(freeObjects()));
|
||||||
|
|
||||||
@ -175,38 +173,64 @@ void HyperionDaemon::freeObjects()
|
|||||||
|
|
||||||
// destroy network first as a client might want to access hyperion
|
// destroy network first as a client might want to access hyperion
|
||||||
delete _jsonServer;
|
delete _jsonServer;
|
||||||
|
_jsonServer = nullptr;
|
||||||
|
|
||||||
auto flatBufferServerThread = _flatBufferServer->thread();
|
if (_flatBufferServer)
|
||||||
flatBufferServerThread->quit();
|
{
|
||||||
flatBufferServerThread->wait();
|
auto flatBufferServerThread = _flatBufferServer->thread();
|
||||||
delete flatBufferServerThread;
|
flatBufferServerThread->quit();
|
||||||
|
flatBufferServerThread->wait();
|
||||||
|
delete flatBufferServerThread;
|
||||||
|
_flatBufferServer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
auto protoServerThread = _protoServer->thread();
|
if (_protoServer)
|
||||||
protoServerThread->quit();
|
{
|
||||||
protoServerThread->wait();
|
auto protoServerThread = _protoServer->thread();
|
||||||
delete protoServerThread;
|
protoServerThread->quit();
|
||||||
|
protoServerThread->wait();
|
||||||
|
delete protoServerThread;
|
||||||
|
_protoServer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
//ssdp before webserver
|
//ssdp before webserver
|
||||||
auto ssdpThread = _ssdp->thread();
|
if (_ssdp)
|
||||||
ssdpThread->quit();
|
{
|
||||||
ssdpThread->wait();
|
auto ssdpThread = _ssdp->thread();
|
||||||
delete ssdpThread;
|
ssdpThread->quit();
|
||||||
|
ssdpThread->wait();
|
||||||
|
delete ssdpThread;
|
||||||
|
_ssdp = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
auto webserverThread =_webserver->thread();
|
if(_webserver)
|
||||||
webserverThread->quit();
|
{
|
||||||
webserverThread->wait();
|
auto webserverThread =_webserver->thread();
|
||||||
delete webserverThread;
|
webserverThread->quit();
|
||||||
|
webserverThread->wait();
|
||||||
|
delete webserverThread;
|
||||||
|
_webserver = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
auto sslWebserverThread =_sslWebserver->thread();
|
if (_sslWebserver)
|
||||||
sslWebserverThread->quit();
|
{
|
||||||
sslWebserverThread->wait();
|
auto sslWebserverThread =_sslWebserver->thread();
|
||||||
delete sslWebserverThread;
|
sslWebserverThread->quit();
|
||||||
|
sslWebserverThread->wait();
|
||||||
|
delete sslWebserverThread;
|
||||||
|
_sslWebserver = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_CEC
|
#ifdef ENABLE_CEC
|
||||||
_cecHandler->thread()->quit();
|
if (_cecHandler)
|
||||||
_cecHandler->thread()->wait(1000);
|
{
|
||||||
delete _cecHandler->thread();
|
auto cecHandlerThread = _cecHandler->thread();
|
||||||
delete _cecHandler;
|
cecHandlerThread->quit();
|
||||||
|
cecHandlerThread->wait();
|
||||||
|
delete cecHandlerThread;
|
||||||
|
delete _cecHandler;
|
||||||
|
_cecHandler = nullptr;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// stop Hyperions (non blocking)
|
// stop Hyperions (non blocking)
|
||||||
@ -221,19 +245,12 @@ void HyperionDaemon::freeObjects()
|
|||||||
delete _v4l2Grabber;
|
delete _v4l2Grabber;
|
||||||
|
|
||||||
_v4l2Grabber = nullptr;
|
_v4l2Grabber = nullptr;
|
||||||
_cecHandler = nullptr;
|
|
||||||
_bonjourBrowserWrapper = nullptr;
|
_bonjourBrowserWrapper = nullptr;
|
||||||
_amlGrabber = nullptr;
|
_amlGrabber = nullptr;
|
||||||
_dispmanx = nullptr;
|
_dispmanx = nullptr;
|
||||||
_fbGrabber = nullptr;
|
_fbGrabber = nullptr;
|
||||||
_osxGrabber = nullptr;
|
_osxGrabber = nullptr;
|
||||||
_qtGrabber = nullptr;
|
_qtGrabber = nullptr;
|
||||||
_flatBufferServer = nullptr;
|
|
||||||
_protoServer = nullptr;
|
|
||||||
_ssdp = nullptr;
|
|
||||||
_webserver = nullptr;
|
|
||||||
_sslWebserver = nullptr;
|
|
||||||
_jsonServer = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HyperionDaemon::startNetworkServices()
|
void HyperionDaemon::startNetworkServices()
|
||||||
|
Loading…
Reference in New Issue
Block a user