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(); }
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>"); }
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)); }
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>",""); } }
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); } }/*}}}*/
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; } }
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; } } } }