Added a new callback to m_client to recovery the connection on server
close. Not tested and not registerig the real universes, only universe 1.
This commit is contained in:
parent
dd544be8dc
commit
fc1eda5ae9
2 changed files with 38 additions and 14 deletions
|
@ -1,5 +1,7 @@
|
|||
#include "olathread.h"
|
||||
|
||||
#include <ola/Callback.h>
|
||||
|
||||
olaThread::olaThread(QObject *parent)
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
|
@ -20,19 +22,6 @@ olaThread::olaThread(QObject *parent)
|
|||
m_dmx[i][j] = 0;
|
||||
}
|
||||
}
|
||||
// set up ola connection
|
||||
m_clientWrapper = new ola::client::OlaClientWrapper;
|
||||
Q_CHECK_PTR(m_clientWrapper);
|
||||
if (!m_clientWrapper->Setup()) { qErrnoWarning("olaThread::olaStart| Failed Setup() in Client Wrapper"); }
|
||||
m_client = m_clientWrapper->GetClient();
|
||||
if (ola::InitLogging(ola::OLA_LOG_INFO , ola::OLA_LOG_STDERR)) {
|
||||
qDebug() << "ola logging debug working";
|
||||
} else {
|
||||
qWarning() << "Can not init ola logging";
|
||||
}
|
||||
m_client->SetDMXCallback(ola::NewCallback(this, &olaThread::NewDmx));
|
||||
m_clientWrapper->GetSelectServer()->RegisterRepeatingTimeout(4000, ola::NewCallback(this, &olaThread::CheckDataLoss));
|
||||
// qDebug() << "Init olaThread";
|
||||
}
|
||||
|
||||
// --- DECONSTRUCTOR ---
|
||||
|
@ -42,6 +31,23 @@ olaThread::~olaThread() {
|
|||
|
||||
/** Open the connection with olad and start processing data.
|
||||
*/
|
||||
// set up ola connection
|
||||
void olaThread::init()
|
||||
{
|
||||
if (ola::InitLogging(ola::OLA_LOG_INFO , ola::OLA_LOG_STDERR)) {
|
||||
qDebug() << "ola logging debug working";
|
||||
} else {
|
||||
qWarning() << "Can not init ola logging";
|
||||
}
|
||||
m_clientWrapper = new ola::client::OlaClientWrapper;
|
||||
Q_CHECK_PTR(m_clientWrapper);
|
||||
if (!m_clientWrapper->Setup()) { qErrnoWarning("olaThread::olaStart| Failed Setup() in Client Wrapper"); }
|
||||
m_client = m_clientWrapper->GetClient();
|
||||
m_client->SetDMXCallback(ola::NewCallback(this, &olaThread::NewDmx));
|
||||
m_clientWrapper->GetSelectServer()->RegisterRepeatingTimeout(4000, ola::NewCallback(this, &olaThread::CheckDataLoss));
|
||||
// qDebug() << "Init olaThread";
|
||||
m_client->SetCloseHandler(ola::NewSingleCallback(this, &olaThread::socketClosed));
|
||||
}
|
||||
|
||||
void olaThread::run()
|
||||
{
|
||||
|
@ -145,12 +151,28 @@ void olaThread::setDMXConf(dmxSetting set)
|
|||
{
|
||||
if (set.layer >= m_layersNumber) { return; }
|
||||
m_settings.replace(set.layer, set);
|
||||
// ToDo: registro del nuevo universo si no está registrado ya
|
||||
// registro del nuevo universo si no está registrado ya
|
||||
if (!m_universe->contains(set.universe)) {
|
||||
registerUniverse(set.universe);
|
||||
m_universe->append(set.universe);
|
||||
}
|
||||
}
|
||||
|
||||
void olaThread::socketClosed()
|
||||
{
|
||||
qDebug("ola close the connection. Trying reopening it... ");
|
||||
// is needed some cleaning?
|
||||
|
||||
// set up ola connection
|
||||
init();
|
||||
|
||||
// Register the universes
|
||||
registerUniverse(1);
|
||||
|
||||
// start the thread????
|
||||
run();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
|
|
@ -87,6 +87,8 @@ private:
|
|||
// typedef Callback2<void, const DMXMetadata&, const DmxBuffer&> ola::client::RepeatableDMXCallback
|
||||
void NewDmx(const ola::client::DMXMetadata &dmx_meta, const ola::DmxBuffer &buffer); // Callback from OlaCLient when there is new dmx info
|
||||
|
||||
void socketClosed();
|
||||
void init();
|
||||
public slots:
|
||||
|
||||
void stop(); // Close the connection with olad.
|
||||
|
|
Loading…
Add table
Reference in a new issue