80 MNERTServer::MNERTServer()
81 : m_fiffStreamServer(this)
82 , m_commandServer(this)
83 , m_connectorManager(&m_fiffStreamServer, this)
85 qRegisterMetaType<MatrixXf>(
"MatrixXf");
86 qRegisterMetaType<QSharedPointer<Eigen::MatrixXf> >(
"QSharedPointer<Eigen::MatrixXf>");
94 m_connectorManager.connectCommands();
97 m_fiffStreamServer.connectCommands();
100 m_commandServer.registerCommandManager(this->getCommandManager());
106 m_connectorManager.loadConnectors(qApp->applicationDirPath()+
connectorDir);
115 m_connectorManager.connectActiveConnector();
122 for(qint32 i = 0; i < m_connectorManager.getConnectors().size(); ++i)
123 m_commandServer.registerCommandManager(m_connectorManager.getConnectors()[i]->getCommandManager());
129 if (!m_commandServer.listen(QHostAddress::Any, 4217)) {
130 printf(
"Unable to start the command server: %s\n", m_commandServer.errorString().toUtf8().constData());
136 if (!m_fiffStreamServer.listen(QHostAddress::Any, 4218)) {
137 printf(
"Unable to start the fiff stream server: %s\n", m_fiffStreamServer.errorString().toUtf8().constData());
142 QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
144 for (
int i = 0; i < ipAddressesList.size(); ++i) {
145 if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
146 ipAddressesList.at(i).toIPv4Address()) {
147 ipAddress = ipAddressesList.at(i).toString();
152 if (ipAddress.isEmpty())
153 ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
155 printf(
"mne_rt_server is running on\n\tIP:\t\t%s\n\tcommand port:\t%d\n\tfiff data port:\t%d\n\n",ipAddress.toUtf8().constData(), m_commandServer.serverPort(), m_fiffStreamServer.serverPort());
161 MNERTServer::~MNERTServer()
163 qDebug() <<
"MNERTServer destructed";
169 void MNERTServer::comClose()
177 void MNERTServer::comHelp(
Command p_command)
179 bool t_bCommandIsJson = p_command.
isJson();
183 Subject::t_Observers::Iterator itObservers;
186 QMap<QString, Command> t_qMapCommands;
188 QMap<QString, Command>::ConstIterator itCommands;
194 for(itCommands = t_pCommandManager->
commandMap().begin(); itCommands != t_pCommandManager->
commandMap().end(); ++itCommands)
196 if(t_qMapCommands.keys().contains(itCommands.key()))
199 qDebug() <<
"Merge has to be performed.";
202 t_qMapCommands.
insert(itCommands.key(), itCommands.value());
209 QJsonObject t_qJsonObjectCommands;
211 for(itCommands = t_qMapCommands.begin(); itCommands != t_qMapCommands.end(); ++itCommands)
212 t_qJsonObjectCommands.insert(itCommands.key(),QJsonValue(itCommands.value().toJsonObject()));
213 QJsonObject t_qJsonObjectRoot;
214 t_qJsonObjectRoot.insert(
"commands", t_qJsonObjectCommands);
215 QJsonDocument p_qJsonDocument(t_qJsonObjectRoot);
218 if(!t_bCommandIsJson)
223 QString p_sOutput(
"");
225 qint32 t_maxSize = 72;
226 qint32 t_maxSizeCommand = 0;
227 qint32 t_maxSizeParameters = 0;
228 qint32 t_maxSizeDescriptions = 0;
231 for(itCommands = t_qMapCommands.begin(); itCommands != t_qMapCommands.end(); ++itCommands)
233 QStringList t_sCommandList = itCommands.value().toStringList();
235 if(t_sCommandList[0].size() > t_maxSizeCommand)
236 t_maxSizeCommand = t_sCommandList[0].size();
238 if(t_sCommandList[1].size() > t_maxSizeParameters)
239 t_maxSizeParameters = t_sCommandList[1].size();
242 t_maxSizeDescriptions = t_maxSizeCommand + t_maxSizeParameters + 2;
243 t_maxSizeDescriptions = t_maxSizeDescriptions < t_maxSize ? t_maxSize - t_maxSizeDescriptions : 20;
246 for(itCommands = t_qMapCommands.begin(); itCommands != t_qMapCommands.end(); ++itCommands)
248 QStringList t_sCommandList = itCommands.value().toStringList();
252 t_sCommand.append(QString(
"\t%1 ").arg(t_sCommandList[0]));
254 for(i = 0; i < t_maxSizeCommand - t_sCommandList[0].size(); ++i)
255 t_sCommand.append(QString(
" "));
257 t_sCommand.append(QString(
"%1 ").arg(t_sCommandList[1]));
259 for(i = 0; i < t_maxSizeParameters - t_sCommandList[1].size(); ++i)
260 t_sCommand.append(QString(
" "));
262 qint32 lines = (int)ceil((
double)t_sCommandList[2].size() / (double)t_maxSizeDescriptions);
263 for(i = 0; i < lines; ++i)
265 t_sCommand.append(QString(
"%1").arg(t_sCommandList[2].mid(i * t_maxSizeDescriptions, t_maxSizeDescriptions)));
266 t_sCommand.append(QString(
"\n\r"));
270 t_sCommand.append(QString(
"\t"));
271 for(qint32 j = 0; j < t_maxSizeCommand + t_maxSizeParameters + 2; ++j)
272 t_sCommand.append(QString(
" "));
275 p_sOutput.append(t_sCommand);
277 m_commandManager[
"help"].reply(p_sOutput);
280 m_commandManager[
"help"].reply(p_qJsonDocument.toJson());
316 QString t_sJsonCommand =
320 " \"description\": \"Prints and sends all available FiffStreamClients.\","
321 " \"parameters\": {}"
324 " \"description\": \"Closes mne_rt_server.\","
325 " \"parameters\": {}"
328 " \"description\": \"Prints and sends all available connectors.\","
329 " \"parameters\": {}"
332 " \"description\": \"Prints and sends this list.\","
333 " \"parameters\": {}"
336 " \"description\": \"Sends the measurement info to the specified FiffStreamClient.\","
339 " \"description\": \"ID/Alias\","
340 " \"type\": \"QString\" "
345 " \"description\": \"Selects a new connector, if a measurement is running it will be stopped.\","
348 " \"description\": \"Connector ID\","
349 " \"type\": \"int\" "
354 " \"description\": \"Adds specified FiffStreamClient to raw data buffer receivers. If acquisition is not already started, it is triggered.\","
357 " \"description\": \"ID/Alias\","
358 " \"type\": \"QString\" "
363 " \"description\": \"Removes specified FiffStreamClient from raw data buffer receivers.\","
366 " \"description\": \"ID/Alias\","
367 " \"type\": \"QString\" "
372 " \"description\": \"Stops the whole acquisition process.\","
373 " \"parameters\": {}"
378 QJsonDocument t_jsonDocumentOrigin = QJsonDocument::fromJson(t_sJsonCommand.toLatin1());
379 m_commandManager.
insert(t_jsonDocumentOrigin);
382 QObject::connect(&m_commandManager[
"help"], &
Command::executed,
this, &MNERTServer::comHelp);
383 QObject::connect(&m_commandManager[
"close"], &
Command::executed,
this, &MNERTServer::comClose);
void insert(const QJsonDocument &p_jsonDocument)
t_Observers & observers()
const char * connectorDir
implementation of the MNERTServer Class.
void executed(Command p_command)
QMap< QString, Command > & commandMap()
CommandParser & getCommandParser()