Brief description of class still missing. More...
#include <SeedLink.h>
Public Types | |
| enum | Error { NoError, StationsNotAvailable, StreamsNotAvailable, FromTimeNotAvailable } |
Signals | |
| void | dataChanged (Signal *sig, TimeRange tw) |
| void | error (GeopsySLink::SeedLink::Error e) |
| void | infoAvailable () |
Public Member Functions | |
| void | addStation (SeedLinkStation *station) |
| bool | addStream (SeedLinkStream *str) |
| Error | error () const |
| int | listeningStreamCount () |
| bool | removeStream (SeedLinkStream *str) |
| SeedLink (QObject *parent=0) | |
| const SeedLinkServer & | serverInfo () const |
| QString | serverName () const |
| quint16 | serverPort () const |
| void | setBufferType (SeedLinkStream::BufferType bt) |
| void | setFromTime (QDateTime f) |
| void | setMaximumDuration (double d) |
| void | setServer (QByteArray address, qint16 port) |
| void | start () |
| void | stations () |
| void | stop () |
| void | streams () |
| SubSignalPool | subPool () const |
| ~SeedLink () | |
Protected Member Functions | |
| virtual void | run () |
Brief description of class still missing.
Full description of class still missing
| GeopsySLink::SeedLink::SeedLink | ( | QObject * | parent = 0 | ) |
Description of constructor still missing
References NoError, GeopsySLink::SeedLinkPrivate::slconn, TRACE, and GeopsySLink::SeedLinkStream::Unlimited.
: QThread(parent)
{
TRACE;
_serverPort=18000;
_internals=new SeedLinkPrivate;
_internals->slconn=0;
_bufferType=SeedLinkStream::Unlimited;
_maximumDuration=0.0;
if(_instance) {
qWarning("Only one instance of Seedlink allowed!");
} else {
_instance=this;
}
_error=NoError;
qRegisterMetaType<GeopsySLink::SeedLink::Error>();
}
Description of destructor still missing
References GeopsySLink::SeedLinkPrivate::slconn, and TRACE.
| void GeopsySLink::SeedLink::addStation | ( | SeedLinkStation * | station | ) | [inline] |
Referenced by ConformProcess::start().
{_serverInfo.addStation(station);}
| bool GeopsySLink::SeedLink::addStream | ( | SeedLinkStream * | str | ) |
References QGpCoreTools::endl(), GeopsySLink::SeedLinkStream::setListening(), str, GeopsySLink::SeedLinkStream::tag(), QGpCoreTools::tr(), and TRACE.
Referenced by ConformProcess::start().
| void GeopsySLink::SeedLink::dataChanged | ( | Signal * | sig, |
| TimeRange | tw | ||
| ) | [signal] |
| Error GeopsySLink::SeedLink::error | ( | ) | const [inline] |
{return _error;}
| void GeopsySLink::SeedLink::error | ( | GeopsySLink::SeedLink::Error | e | ) | [signal] |
| void GeopsySLink::SeedLink::infoAvailable | ( | ) | [signal] |
| int GeopsySLink::SeedLink::listeningStreamCount | ( | ) | [inline] |
{return _listeningStreams.count();}
| bool GeopsySLink::SeedLink::removeStream | ( | SeedLinkStream * | str | ) |
References GeopsySLink::SeedLinkStream::detachSignal(), QGpCoreTools::endl(), GeopsySLink::SeedLinkStream::setListening(), GeopsySLink::SeedLinkStream::tag(), QGpCoreTools::tr(), and TRACE.
{
TRACE;
QMutexLocker m(&_mutex);
_request=Data;
if(_listeningStreams.contains(str->tag())) {
_listeningStreams.remove(str->tag());
str->detachSignal();
str->setListening(false);
App::stream() << tr("Stop listening to stream %1").arg(str->tag().data()) << endl;
return true;
} else {
return false;
}
}
| void GeopsySLink::SeedLink::run | ( | ) | [protected, virtual] |
References QGpCoreTools::endl(), GeopsyCore::Signal::endTime(), GeopsySLink::SeedLinkStream::location(), GeopsySLink::SeedLinkStation::name(), GeopsySLink::SeedLinkStation::network(), NoError, GeopsySLink::SeedLinkStream::seedName(), GeopsySLink::SeedLinkStream::signal(), GeopsySLink::SeedLinkPrivate::slconn, GeopsySLink::SeedLinkPrivate::slpack, GeopsySLink::SeedLinkStream::station(), GeopsyCore::Signal::timeReference(), QGpCoreTools::tr(), TRACE, and GeopsySLink::SeedLinkStream::type().
{
TRACE;
_error=NoError;
switch (_request) {
case Streams:
_xmlInfos.clear();
_internals->slconn=LibSLink::sl_newslcd();
sl_request_info(_internals->slconn, "STREAMS" );
sl_setuniparams (_internals->slconn, 0, -1, 0);
App::stream() << tr("Requesting list of streams...") << endl;
break;
case Stations:
_xmlInfos.clear();
_internals->slconn=LibSLink::sl_newslcd();
LibSLink::sl_request_info(_internals->slconn, "STATIONS" );
LibSLink::sl_setuniparams (_internals->slconn, 0, -1, 0);
App::stream() << tr("Requesting list of stations...") << endl;
break;
case Data: {
_internals->slconn=LibSLink::sl_newslcd();
_mutex.lock();
// Set fromTime to _fromTime if not all active signals are already initialized
QDateTime fromTime;
for(QMap<QByteArray,SeedLinkStream *>::iterator it=_listeningStreams.begin(); it!=_listeningStreams.end();it++) {
SeedLinkStream& str=*it.value();
if( !str.signal()) {
fromTime=_fromTime;
break;
}
}
QMap<SeedLinkStation *,QList<SeedLinkStream *> > newStreams;
for(QMap<QByteArray,SeedLinkStream *>::iterator it=_listeningStreams.begin(); it!=_listeningStreams.end();it++) {
SeedLinkStream * str=it.value();
SeedLinkStation * sta=str->station();
QMap<SeedLinkStation *,QList<SeedLinkStream *> >::iterator its;
its=newStreams.find(sta);
if(its!=newStreams.end()) {
its.value().append(str);
} else {
QList<SeedLinkStream *> list;
list.append(str);
newStreams.insert(sta, list);
}
}
for(QMap<SeedLinkStation *,QList<SeedLinkStream *> >::iterator it=newStreams.begin(); it!=newStreams.end();it++) {
SeedLinkStation * sta=it.key();
QList<SeedLinkStream *>& list=it.value();
QString selectors;
for(QList<SeedLinkStream *>::iterator its=list.begin();its!=list.end();its++) {
SeedLinkStream * str=*its;
if(str->signal()) {
QDateTime endTime=str->signal()->timeReference();
endTime=endTime.addSecs((int) floor(str->signal()->endTime()) );
if(!fromTime.isValid() || endTime<fromTime) fromTime=endTime;
}
selectors+=" "+str->location()+str->seedName()+"."+str->type();
}
App::stream() << tr("Requesting streams %1_%2:%3").arg(sta->network()).arg(sta->name()).arg(selectors) << endl;
LibSLink::sl_addstream(_internals->slconn, sta->network().toAscii().data(),
sta->name().toAscii().data(),
selectors.toAscii().data(), -1, 0);
}
if(fromTime.isValid()) {
_internals->slconn->begin_time=strdup(fromTime.toString("yyyy,MM,dd,hh,mm,ss").toAscii().data());
}
_mutex.unlock();
}
break;
case Dns: {
// Check if serverName is a numerical address or not
QRegExp ipExp("[0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*");
if(ipExp.exactMatch(_serverName) ) {
_serverAddress=_serverName+":"+QString::number(_serverPort).toAscii();
} else {
QHostInfo info=QHostInfo::fromName(_serverName);
if(info.addresses().isEmpty()) {
return;
}
_serverAddress=info.addresses().first().toString().toAscii()+":"+QString::number(_serverPort).toAscii();
App::stream() << tr("Resolved %1:%2 into %3").arg(_serverName.data()).arg(_serverPort).arg(_serverAddress.data()) << endl;
}
}
return;
}
_internals->slconn->sladdr=(char *) malloc(_serverAddress.length()+1);
strcpy(_internals->slconn->sladdr, _serverAddress.data());
_internals->slconn->resume=0;
while(sl_collect(_internals->slconn, &_internals->slpack)!=0) {
//App::stream() << tr("collect packet") << endl;
packetReceived();
}
/* Make sure everything is shut down*/
if(_internals->slconn->link!=-1) sl_disconnect (_internals->slconn);
sl_freeslcd (_internals->slconn);
_internals->slconn=0;
}
| const SeedLinkServer& GeopsySLink::SeedLink::serverInfo | ( | ) | const [inline] |
Referenced by GeopsySLinkGui::SeedLinkLoader::selectStreams().
{return _serverInfo;}
| QString GeopsySLink::SeedLink::serverName | ( | ) | const [inline] |
Referenced by GeopsySLinkGui::SeedLinkLoader::setServer().
{return _serverName;}
| quint16 GeopsySLink::SeedLink::serverPort | ( | ) | const [inline] |
Referenced by GeopsySLinkGui::SeedLinkLoader::setServer().
{return _serverPort;}
| void GeopsySLink::SeedLink::setBufferType | ( | SeedLinkStream::BufferType | bt | ) | [inline] |
Referenced by ConformProcess::ConformProcess(), GeopsySLinkGui::SeedLinkLoaderOptions::getParam(), ProcessUnit::ProcessUnit(), and GeopsySLinkGui::SeedLinkLoaderOptions::restore().
{_bufferType=bt;}
| void GeopsySLink::SeedLink::setFromTime | ( | QDateTime | f | ) | [inline] |
Referenced by GeopsySLinkGui::SeedLinkLoaderOptions::getParam(), and GeopsySLinkGui::SeedLinkLoaderOptions::restore().
{_fromTime=f;}
| void GeopsySLink::SeedLink::setMaximumDuration | ( | double | d | ) | [inline] |
Referenced by ConformProcess::ConformProcess(), GeopsySLinkGui::SeedLinkLoaderOptions::getParam(), GeopsySLinkGui::SeedLinkLoaderOptions::restore(), ProcessUnit::setArrayWindowLength(), and ProcessUnit::setHVWindowLength().
{_maximumDuration=d;}
| void GeopsySLink::SeedLink::setServer | ( | QByteArray | address, |
| qint16 | port | ||
| ) |
References start(), stop(), and TRACE.
Referenced by ProcessUnit::setServer(), GeopsySLinkGui::SeedLinkLoader::setServer(), and ConformProcess::start().
| void GeopsySLink::SeedLink::start | ( | ) |
Referenced by setServer(), ConformProcess::start(), stations(), and streams().
{
TRACE;
if(isRunning()) stop();
LibSLink::sl_loginit (0, log, NULL, log, NULL);
QThread::start();
}
| void GeopsySLink::SeedLink::stations | ( | ) |
| void GeopsySLink::SeedLink::stop | ( | ) |
References GeopsySLink::SeedLinkPrivate::slconn, and TRACE.
Referenced by setServer(), start(), stations(), streams(), ProcessUnit::~ProcessUnit(), and GeopsySLinkGui::SeedLinkLoader::~SeedLinkLoader().
| void GeopsySLink::SeedLink::streams | ( | ) |
References GeopsySLink::SeedLinkServer::clear(), start(), stop(), and TRACE.
Referenced by ProcessUnit::setServer(), and GeopsySLinkGui::SeedLinkLoader::setServer().
| SubSignalPool GeopsySLink::SeedLink::subPool | ( | ) | const |
References GeopsyCore::SubSignalPool::addSignal(), GeopsyCore::SubSignalPool::setName(), QGpCoreTools::tr(), and TRACE.
{
TRACE;
SubSignalPool s;
for(QMap<QByteArray,SeedLinkStream *>::const_iterator it=_listeningStreams.begin(); it!=_listeningStreams.end();it++) {
s.addSignal(it.value()->signal());
}
s.setName(tr("Active SeedLink signals"));
return s;
}