48 #include <rtCommand/commandmanager.h>
67 #include <QStringList>
68 #include <QTextStream>
87 : QPluginLoader(parent)
88 , m_pFiffStreamServer(p_pFiffStreamServer)
98 QVector<IConnector*>::const_iterator it = s_vecConnectors.begin();
99 for( ; it != s_vecConnectors.end(); ++it)
106 void ConnectorManager::clearConnectorActivation()
109 if(s_vecConnectors.size() > 0)
111 QVector<IConnector*>::const_iterator it = s_vecConnectors.begin();
112 for( ; it != s_vecConnectors.end(); ++it)
113 if((*it)->isActive())
114 (*it)->setStatus(
false);
121 void ConnectorManager::comConlist(
Command p_command)
123 bool t_bCommandIsJson = p_command.
isJson();
127 if(!t_bCommandIsJson)
137 void ConnectorManager::comSelcon(
Command p_command)
141 qint32 t_id = p_command.
pValues()[0].toInt(&t_bIsInt);
147 qDebug() << t_sActivated;
149 bool t_bCommandIsJson = p_command.
isJson();
151 if(!t_bCommandIsJson)
162 void ConnectorManager::comStart(
Command p_command)
165 qobject_cast<
MNERTServer*>(this->parent())->getCommandManager()[
"start"].reply(
"Starting active connector.\n");
173 void ConnectorManager::comStopAll(
Command p_command)
176 qobject_cast<
MNERTServer*>(this->parent())->getCommandManager()[
"stop-all"].reply(
"Stoping all connectors.\r\n");
184 void ConnectorManager::connectActiveConnector()
188 if(t_activeConnector)
206 QObject::connect( this->m_pFiffStreamServer, &FiffStreamServer::requestMeasInfo,
210 QObject::connect( t_activeConnector, &IConnector::remitMeasInfo,
219 QObject::connect( t_activeConnector, &IConnector::remitRawBuffer,
220 this->m_pFiffStreamServer, &FiffStreamServer::forwardRawBuffer);
224 printf(
"Error: Can't connect, no connector active!\n");
231 void ConnectorManager::disconnectActiveConnector()
235 if(t_activeConnector)
252 this->disconnect(t_activeConnector);
254 t_activeConnector->disconnect(this->m_pFiffStreamServer);
256 this->m_pFiffStreamServer->disconnect(t_activeConnector);
274 printf(
"Error: Can't connect, no connector active!\n");
283 QVector<IConnector*>::const_iterator it = s_vecConnectors.begin();
284 for( ; it != s_vecConnectors.end(); ++it)
286 if((*it)->isActive())
298 QByteArray t_blockConnectorList;
302 QJsonObject t_qJsonObjectConnectors;
304 QVector<IConnector*>::const_iterator it = s_vecConnectors.begin();
305 for( ; it != s_vecConnectors.end(); ++it)
307 QJsonObject t_qJsonObjectConnector;
310 t_qJsonObjectConnector.insert(QString(
"id"), QJsonValue((*it)->getConnectorID()));
313 t_qJsonObjectConnector.insert(QString(
"active"), QJsonValue((*it)->isActive()));
316 t_qJsonObjectConnectors.insert((*it)->getName(),t_qJsonObjectConnector);
320 QJsonObject t_qJsonObjectRoot;
321 t_qJsonObjectRoot.insert(
"connectors", t_qJsonObjectConnectors);
322 QJsonDocument p_qJsonDocument(t_qJsonObjectRoot);
324 t_blockConnectorList.append(p_qJsonDocument.toJson());
328 if(s_vecConnectors.size() > 0)
330 QVector<IConnector*>::const_iterator it = s_vecConnectors.begin();
331 for( ; it != s_vecConnectors.end(); ++it)
333 if((*it)->isActive())
334 t_blockConnectorList.append(QString(
" * (%1) %2\r\n").arg((*it)->getConnectorID()).arg((*it)->getName()));
336 t_blockConnectorList.append(QString(
" (%1) %2\r\n").arg((*it)->getConnectorID()).arg((*it)->getName()));
340 t_blockConnectorList.append(
" - no connector loaded - \r\n");
341 t_blockConnectorList.append(
"\r\n");
343 return t_blockConnectorList;
364 clearConnectorActivation();
366 QDir ConnectorsDir(dir);
368 printf(
"Loading connectors in directory... %s\n", ConnectorsDir.path().toUtf8().constData() );
370 foreach(QString fileName, ConnectorsDir.entryList(QDir::Files))
372 if(fileName.compare(
"README") == 0 || fileName.compare(
"plugin.cfg") == 0)
375 this->setFileName(ConnectorsDir.absoluteFilePath(fileName));
376 QObject *pConnector = this->instance();
378 printf(
"\tLoading %s... ", fileName.toUtf8().constData() );
387 QJsonObject t_qJsonObjectMetaData = this->metaData().value(
"MetaData").toObject();
389 QJsonDocument t_jsonDocumentOrigin(t_qJsonObjectMetaData);
393 s_vecConnectors.push_back(t_pIConnector);
403 qint32 configConnector = -1;
404 QString configFileName(
"plugin.cfg");
405 QFile configFile(dir+
"/"+configFileName);
406 if(!configFile.open(QIODevice::ReadOnly)) {
407 printf(
"Not able to read config file... %s\n", configFile.fileName().toUtf8().constData());
411 printf(
"\tReading %s... ", configFileName.toUtf8().constData());
413 QTextStream in(&configFile);
414 QString line = in.readLine();
416 while (!line.isNull()) {
417 list = line.split(
":");
419 if(list[0].simplified().compare(
"defaultConnector") == 0)
421 configConnector = list[1].simplified().toInt();
424 line = in.readLine();
427 if(s_vecConnectors.size() > 0)
430 bool activated =
false;
432 if( configConnector != -1)
434 for(qint32 i = 0; i < s_vecConnectors.size(); ++i)
436 if(s_vecConnectors[i]->getConnectorID() == configConnector)
438 s_vecConnectors[i]->setStatus(
true);
439 printf(
"activate %s... ", s_vecConnectors[i]->getName());
449 s_vecConnectors[0]->setStatus(
true);
453 printf(
"Connector list\n");
462 QByteArray p_blockClientList;
468 QVector<IConnector*>::const_iterator it = s_vecConnectors.begin();
469 for( ; it != s_vecConnectors.end(); ++it)
470 if((*it)->getConnectorID() == ID)
471 t_pNewActiveConnector = *it;
473 if (t_pNewActiveConnector)
479 t_pActiveConnector->
stop();
480 this->disconnectActiveConnector();
485 this->connectActiveConnector();
487 str = QString(
"\t%1 activated.\r\n\n").arg(t_pNewActiveConnector->
getName());
488 p_blockClientList.append(str);
492 str = QString(
"\tID %1 doesn't match a connector ID.\r\n\n").arg(ID);
493 p_blockClientList.append(str);
500 p_blockClientList.append(str);
503 return p_blockClientList;
512 QVector<IConnector*> ConnectorManager:: s_vecConnectors;
void insert(const QJsonDocument &p_jsonDocument)
QByteArray setActiveConnector(qint32 ID)
CommandManager & getCommandManager()
The FiffStreamServer class provides.
virtual ~ConnectorManager()
void forwardMeasInfo(qint32 ID, FiffInfo p_fiffInfo)
void loadConnectors(const QString &dir)
CommandManager & getCommandManager()
The MNERTServer class provides a Fiff data simulator.
virtual void connectCommandManager()=0
implementation of the FiffStreamServer Class.
The IConnector class is the interface class of all plugins.
QByteArray getConnectorList(bool p_bFlagJSON=false) const
implementation of the MNERTServer Class.
ConnectorManager(FiffStreamServer *p_pFiffStreamServer, QObject *parent=0)
QList< QVariant > & pValues()
implementation of the ConnectorManager Class.
void executed(Command p_command)
void setStatus(bool status)
virtual const char * getName() const =0
void setMetaData(QJsonObject &p_MetaData)
IConnector * getActiveConnector()
implementation of the CommandServer Class.
virtual void info(qint32 ID)=0