Beispiel #1
0
int main(int argc, char *argv[])
{
    std::string startMode = checkArguments (argc,argv);

    QApplication a(argc, argv);

    bool simulationMode=false;
    if (startMode=="simulation")
        simulationMode = true;

    DataProcessing dataProcessor(simulationMode);
    MapWidget mapW;
    OriginDataWidget originDataW;
    StationsDataWidget stationsDataW;

    /**SIGNAL -> SLOT mapping**/

    QObject::connect (&dataProcessor, SIGNAL(stationsLoaded(std::set<Station>)),
                      &stationsDataW, SLOT(showStationsData(std::set<Station>)));

    QObject::connect (&dataProcessor, SIGNAL(stationsLoaded(std::set<Station>)),
                      &mapW, SLOT(paintStations(std::set<Station>)));

    QObject::connect (&dataProcessor, SIGNAL(originReceived(Origin)),
                      &originDataW, SLOT(showOriginData(Origin)));

    QObject::connect (&dataProcessor, SIGNAL(originReceived(Origin)),
                      &mapW, SLOT(paintOrigin(Origin)));

    QObject::connect (&dataProcessor, SIGNAL(stationColorReceived(std::set<Station>)),
                      &stationsDataW, SLOT(changeStationsData(std::set<Station>)));

    QObject::connect (&dataProcessor, SIGNAL(stationColorReceived(std::set<Station>)),
                      &mapW, SLOT(changeStationsColors(std::set<Station>)));

    QObject::connect (&dataProcessor, SIGNAL(eventReceived(Origin)),
                      &originDataW, SLOT(showOriginData(Origin)));

    QObject::connect (&dataProcessor, SIGNAL(eventReceived(Origin)),
                      &mapW, SLOT(paintOrigin(Origin)));

    mapW.show();
    originDataW.show();
    stationsDataW.show();

    if (startMode == "realtime"){
        dataProcessor.init();
    }
    else if (startMode == "simulation"){
        QDateTime datetime =QDateTime::fromString(QString(argv[2])+" "+QString(argv[3]),
                                                  "yyyy-MM-dd hh:mm:ss");
        dataProcessor.init();
        dataProcessor.initSimulation(datetime);
    }

    return a.exec();
}
Beispiel #2
0
void Asterisk::onSocketReadyRead()
{
//    qDebug("<ready-read>");

    QVariantHash headers;

    while (socket.canReadLine()) {
        QByteArray line = socket.readLine();

//        qDebug() << "Line:" << line;

        if (line != "\r\n") {
            QStringList header = QString(line.trimmed()).split(':');

            headers.insertMulti(header[0], decodeValue(header[1].trimmed()));
        } else {
            if (headers.contains("Response"))
                responses.insert(headers.take("ActionID").toString(), headers);
            else if (headers.contains("Event"))
                emit eventReceived(headers.take("Event").toString(), headers);

            headers.clear();
        }
    }

//    qDebug("</ready-read>");
}
Beispiel #3
0
tlen::tlen( QObject* parent ): QObject( parent ) {
	state = tlen::Disconnected;

	hostname = "s1.tlen.pl";
	hostport = 443;
	Secure = false;
	Reconnect = false;

	Status= tlen::unavailable;
	Descr="";

	tmpDoc=new QDomDocument;

	socket=new QTcpSocket();
	ping=new QTimer();

	connect(socket, SIGNAL(connected()), this, SLOT(socketConnected()));
	connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead()));
	connect(socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));

	connect(this, SIGNAL(tlenLoggedIn()), this, SLOT(writeStatus()));
	connect(this, SIGNAL(statusUpdate()), this, SLOT(writeStatus()));

	connect(this, SIGNAL(eventReceived(QDomNode)), this, SLOT(event(QDomNode)));

	connect(ping, SIGNAL(timeout()), this, SLOT(sendPing()));
	srand(time(NULL));
}
Beispiel #4
0
void tlen::socketReadyRead() {
	kdebugf();
	stream+=socket->readAll();
	stream.prepend("<xmlroot>");
	stream.append("</xmlroot>");

	if( tmpDoc->setContent(stream) || stream.startsWith("<xmlroot><s ") ) {
		qDebug()<<"Read:"<<tmpDoc->toString();

		QDomDocument d;
		d.setContent(stream);
		QDomNode root=d.firstChild();

		if(root.hasChildNodes()) {
			QDomNodeList sl=root.childNodes();
			for(int i=0; i<sl.count(); i++)
				emit eventReceived(sl.item(i));
		}
		tmpDoc->clear();
		stream.clear();
	} else {
		stream.replace("<xmlroot>", "");
		stream.replace("</xmlroot>","");
	}
}
Beispiel #5
0
void MidiJackDevice::collectMidiEvents()/*{{{*/
{
    if (!_readEnable)
        return;

    if (!_in_client_jackport) // p3.3.55
        return;

    void* port_buf = jack_port_get_buffer(_in_client_jackport, segmentSize); // p3.3.55

    jack_midi_event_t event;
    jack_nframes_t eventCount = jack_midi_get_event_count(port_buf);
    for (jack_nframes_t i = 0; i < eventCount; ++i)
    {
        jack_midi_event_get(&event, port_buf, i);

#ifdef JACK_MIDI_DEBUG
        printf("MidiJackDevice::collectMidiEvents number:%d time:%d\n", i, event.time);
#endif

        eventReceived(&event);
    }
}/*}}}*/
Beispiel #6
0
void tlen::event(const QDomNode &n) {
	kdebugf();
	QString nodeName=n.nodeName();
	QDomElement element = n.toElement();
	if(nodeName=="s" && element.hasAttribute("i")) {
		ping->start( 50000 );
		sid = element.attribute("i");
		if(tlenLogin())
 			state = tlen::Connected;
		else
			socket->close(); // TODO: Dont close connection and repeat login, after n times disconnect, signal
	}
	else if(nodeName=="iq") {
		if(element.hasAttribute( "type" ) && element.attribute("type") == "result") {
			// tcfg
			if(element.hasAttribute("id") && element.attribute("id")==sid) {
				tcfgRequest();
				rosterRequest();
			}
			if(element.hasAttribute("from") && element.attribute("from")=="tuba" && element.hasAttribute("id")){
				// <iq from="tuba" type="result" to="jid" id="tr">
				// <query xmlns="jabber:iq:register">
				// <item></item></query></iq>
				if(element.attribute("id")=="tr") {
					QDomElement query = element.elementsByTagName("query").item(0).toElement();
					//if (query.hasAttribute("xmlns") && element.attribute("xmlns")=="jabber:iq:register")
					emit pubdirReceived(query.childNodes());
					return;
				}
				if(element.attribute("id")=="tw") {
					//if (query.hasAttribute("xmlns") && element.attribute("xmlns")=="jabber:iq:register")
					// TODO implement unsuccess if timeout
					emit pubdirUpdated(true);
					return;
				}
			}
			if(element.hasAttribute("id") && element.attribute("id")=="GetRoster") {
				emit clearRosterView();
			}
			if(element.hasAttribute("from") && element.attribute("from") == "tcfg") {
				tcfgReceived(element);
				return;
			}

			if(n.hasChildNodes()) {
				QDomNodeList el=n.childNodes();
				for(int i=0;i<el.count();++i)
					emit eventReceived(el.item(i));
			}

			if(0) {
				emit tlenLoggedIn();
			}

		}
		else if(element.hasAttribute("type") && element.attribute("type") == "set") {
			if(n.hasChildNodes()) {
				QDomNodeList el=n.childNodes();
				for(int i=0;i<el.count();++i)
					emit eventReceived(el.item(i));
			}
		}
	}
	else if(nodeName=="query") {
		QDomElement e=n.toElement();
		QDomNodeList nl=n.childNodes();
		for(int i=0;i<nl.count();++i)
			event(nl.item(i));
	}
	else if(nodeName=="item") {
		QDomElement e=n.toElement();
		QString jid=decode(e.attribute("jid"));
		QString subscription=e.attribute("subscription");
		QString name=NULL, group=NULL;

		if(subscription=="remove") {
			emit removeItem(jid);
			return;
		}

		if(e.hasAttribute("ask"))
			subscription=e.attribute("ask");

		if(e.hasAttribute("name"))
			name=e.attribute("name");
		else
			name=jid;

		if( n.hasChildNodes() ) {
			QDomNodeList nl=n.childNodes();
			for(int i=0;i<nl.count();++i) {
				group=nl.item(i).firstChild().toText().data();
			}
		}

		if(group.isEmpty())
			group=tr("Contacts");

		group=decode(group.toUtf8());
		name=decode(name.toUtf8());

		emit itemReceived(jid, name, subscription, group);

	}
	else if(nodeName=="presence") {
		QDomElement e=n.toElement();
		QString from=decode(e.attribute("from"));

		if(e.hasAttribute("type") && e.attribute("type")=="subscribe") {
			emit authorizationAsk(from);
		}
		else if( e.hasAttribute("type") && e.attribute("type")=="subscribed" )
			return;
		else if(e.hasAttribute("type") && (e.attribute("type")=="unsubscribe" || e.attribute("type")=="unsubscribed"))
			return;
		else {
			QString status="none";
			QString descr="";

			if(e.hasAttribute("type"))
				status=e.attribute("type");

			QDomNodeList l=n.childNodes();

			for(int i=0; i<l.count(); ++i) {
				if(l.item(i).nodeName()=="show" && status=="none")
					status=l.item(i).firstChild().toText().data();
				if(l.item(i).nodeName()=="status")
					descr=l.item(i).firstChild().toText().data();
				if(l.item(i).nodeName()=="avatar")
				{
					// TODO store jid,type,md5 on list/qmultimap, check md5 - avatar changed
					QDomElement avatar = l.item(i).toElement().elementsByTagName("a").item(0).toElement();
					if (avatar.hasAttribute("type") && avatar.hasAttribute("md5"))
					{
						emit avatarReceived(decode(from), avatar.attribute("type"), avatar.attribute("md5"));
						qDebug() << "Avatar " << from << "type:" <<avatar.attribute("type") << "md5:" << avatar.attribute("md5");
					}
				}
			}

			descr=decode(descr.toUtf8());

			emit presenceChanged(from,status,descr);
		}
	}
	else if(nodeName=="message") {
		QDomElement e=n.toElement();
		if(e.hasAttribute("type") && e.attribute("type")=="chat")
			emit chatMsgReceived(n);
	}
	else if(nodeName=="m") {
		QDomElement e=n.toElement();
		if(e.hasAttribute("tp")) {
			emit chatNotify(decode(e.attribute("f")), e.attribute("tp"));
		}
	}
	else if(nodeName=="n") {
		//<n f='Rainer+Wiesenfarth+%[email protected]%3E' s='Re%3A+qt+and+mysql,+odbc'/> - new mail
	}
	else if(nodeName=="avatar") {
		// search for token
		QDomElement e=n.toElement();
		QDomNodeList l=n.childNodes();
		for(int i=0; i<l.count(); ++i)
			if(l.item(i).nodeName()=="token")
				token=l.item(i).firstChild().toText().data();
	}
	else if(nodeName=="f") {
		QDomElement e=n.toElement();
		if(e.attribute("e")=="1") {
			//fileIncomingDialog *dlg=new fileIncomingDialog(n);
			//connect(dlg, SIGNAL(receive(QString,QString,bool)), this, SLOT(receiveFile(QString,QString,bool)));
			//dlg->show();
		}
		else if(e.attribute("e")=="5") {
			//if( fileTransferDialog *dlg = fTransferMap.value( QString("%1-%2").arg( e.attribute("f") ).arg( e.attribute("i") ) ) )
			//	dlg->fileThread()->transferingAccepted();
		}
		else if(e.attribute("e")=="6") {
			//fileTransferDialog *dlg=new fileTransferDialog( e.attribute("i").toInt(), e.attribute("f"), e.attribute("a"), (quint16)e.attribute("p").toInt(), TRUE);
			//fTransferMap.insert(QString("%1-%2").arg( e.attribute("f") ).arg( e.attribute("i") ), dlg);
			//dlg->show();
		}
		else if(e.attribute("e")=="7") {
			//if( fileTransferDialog *dlg = fTransferMap.value( QString("%1-%2").arg( e.attribute("f") ).arg( e.attribute("i") ) ) )
			//	dlg->fileThread()->switchToSocketMode( e.attribute("a"), (quint16)e.attribute("p").toInt() );
		}
	}
}
void BytestreamParser::
parse(const unsigned char c)
{
	switch (_state) {
	// there may be either a regular character from a response string, or an
	// event starting. We can determine this information by looking at the
	// high bit. If it is set, it is an event
	case 0:
		if ((c & 0x80) == 0) {
			if (c == '\n') {
				if (!_response)
					std::cerr << "EE: BytestreamParser _response is nullptr where it should not be" << std::endl;
				else
					emit responseReceived(std::move(_response));

				_response = new QString();
				_response->reserve(64);
			}
			else
				_response->append(c);
		}
		else {
			_ev = new DVSEvent;
			_ev->id = _id;
			_ev->x = static_cast<uint16_t>(c) & 0x7F;
			_ev->y = 0;
			_ev->p = 0;
			_ev->t = 0;
			++_state;
		}
		break;

	case 1:
		_ev->p = (static_cast<uint8_t>(c) & 0x80) >> 7;
		_ev->y = static_cast<uint16_t>(c) & 0x7F;
		if (_timeformat == DVSEvent::TIMEFORMAT_0BYTES) {
			emit eventReceived(std::move(_ev));
			_ev = nullptr;
			_state = 0;
		}
		else
			++_state;
		break;

	case 2:
		if (_timeformat == DVSEvent::TIMEFORMAT_2BYTES)
			_ev->t |= static_cast<uint64_t>(c) << 8;
		else
			_ev->t |= static_cast<uint64_t>(c) << 16;
		++_state;
		break;

	case 3:
		if (_timeformat == DVSEvent::TIMEFORMAT_2BYTES) {
			_ev->t |= static_cast<uint64_t>(c);
			emit eventReceived(std::move(_ev));
			_ev = nullptr;
			_state = 0;
		}
		else {
			_ev->t |= static_cast<uint64_t>(c) << 8;
			++_state;
		}
		break;

	case 4:
		_ev->t |= static_cast<uint64_t>(c);
		emit eventReceived(std::move(_ev));
		_ev = nullptr;
		_state = 0;
		break;

	default:
		// TODO: report the error to some other function, don't just
		// print it
		// found a state that should not be there. exit
		std::cerr << "EE: BytestreamParser in unknown state. resetting" << std::endl;
		_state = 0;
		break;
	}

}
Beispiel #8
0
void SocketIOClient::parseMessage(QString message)
{
    //qDebug() << "SocketIOClient::parseMessage" << message;
    QRegExp regExp("^([^:]+):([0-9]+)?(\\+)?:([^:]+)?:?([\\s\\S]*)?$", Qt::CaseInsensitive, QRegExp::RegExp2);
    if (regExp.indexIn(message) != -1)
    {
        QStringList captured = regExp.capturedTexts();
        //qDebug() << "Found:" << regExp.capturedTexts();
        int messageType = captured.at(1).toInt();
        int messageId = captured.at(2).toInt();
        bool mustAck = (messageId != 0);
        bool autoAck = mustAck && captured.at(3).isEmpty();
        QString endpoint = captured.at(4);
        QString data = captured.at(5);
        /*qDebug() << "MessageType:" << messageType << "MessageId:" << messageId <<
                    "autoAck:" << autoAck << "mustAck:" << mustAck << "endpoint:" << endpoint <<
                    "data:" << data;*/

        if (autoAck)
        {
            acknowledge(messageId);
        }

        switch(messageType)
        {
            case 0:	//disconnect
            {
                Q_EMIT(disconnected(endpoint));
                break;
            }
            case 1: //connect
            {
                m_pHeartBeatTimer->start();
                Q_EMIT(connected(endpoint));
                break;
            }
            case 2:	//heartbeat
            {
                Q_EMIT(heartbeatReceived());
                break;
            }
            case 3:	//message
            {
                Q_EMIT(messageReceived(data));
                break;
            }
            case 4:	//json message
            {
                qDebug() << "JSON message received:" << data;
                break;
            }
            case 5: //event
            {
                QJsonParseError parseError;
                //qDebug() << "Event received:" << data;
                QJsonDocument document = QJsonDocument::fromJson(QByteArray(data.toLatin1()), &parseError);
                if (parseError.error != QJsonParseError::NoError)
                {
                    qDebug() << parseError.errorString();
                }
                else
                {
                    if (document.isObject())
                    {
                        QJsonObject object = document.object();
                        QJsonValue value = object["name"];
                        if (!value.isUndefined())
                        {
                            QString message = value.toString();
                            //QVariantList arguments;
                            QJsonArray arguments;
                            QJsonValue argsValue = object["args"];
                            if (!argsValue.isUndefined() && !argsValue.isNull())
                            {
                                if (argsValue.isArray())
                                {
                                    //QJsonArray argsArray = argsValue.toArray();
                                    //arguments = argsArray.toVariantList();
                                    arguments = argsValue.toArray();
                                    //qDebug() << "Received arguments" << argsValue;
                                    /*Q_FOREACH(QJsonValue val, argsArray)
                                    {
                                        arguments << val.toVariant();
                                    }*/
                                }
                                else
                                {
                                    qDebug() << "Args argument is not an array";
                                    return;
                                }
                            }
                            Q_EMIT(eventReceived(message, arguments));
                        }
                        else
                        {
                            qDebug() << "Invalid event received: no name";
                        }
                    }
                }
                break;
            }
            case 6:	//ack
            {
                QRegExp regExp("^([0-9]+)(\\+)?(.*)$", Qt::CaseInsensitive, QRegExp::RegExp2);
                if (regExp.indexIn(data) != -1)
                {
                    QJsonParseError parseError;
                    //QVariantList arguments;
                    QJsonArray arguments;
                    int messageId = regExp.cap(1).toInt();
                    QString argumentsValue = regExp.cap(3);
                    if (!argumentsValue.isEmpty())
                    {
                        QJsonDocument doc = QJsonDocument::fromJson(argumentsValue.toLatin1(), &parseError);
                        if (parseError.error != QJsonParseError::NoError)
                        {
                            qDebug() << "JSONParseError:" << parseError.errorString();
                            return;
                        }
                        else
                        {
                            if (doc.isArray())
                            {
                                //arguments = doc.array().toVariantList();
                                arguments = doc.array();
                            }
                            else
                            {
                                qDebug() << "Error: data of event is not an array";
                                return;
                            }
                        }
                    }
                    Q_EMIT(ackReceived(messageId, arguments));
                }
                break;
            }
            case 7:	//error
            {
                QStringList pieces = data.split("+");
                QString reason = pieces[0];
                QString advice;
                if (pieces.length() == 2)
                {
                    advice = pieces[1];
                }
                Q_EMIT(errorReceived(reason, advice));
                break;
            }
            case 8:	//noop
            {
                qDebug() << "Noop received" << data;
                break;
            }
        }
    }
}