Esempio n. 1
0
SocketIOClient::SocketIOClient(QObject *parent) :
    QObject(parent),
    m_pWebSocket(0),
    m_pNetworkAccessManager(0),
    m_requestUrl(),
    m_mustMask(true),
    m_connectionTimeout(30000),
    m_heartBeatTimeout(20000),
    m_pHeartBeatTimer(0),
    m_sessionId()
{
    m_pWebSocket = new QWebSocket(QString(), QWebSocketProtocol::V_LATEST, this);
    m_pNetworkAccessManager = new QNetworkAccessManager(this);
    m_pHeartBeatTimer = new QTimer(this);
    m_pHeartBeatTimer->setInterval(m_heartBeatTimeout);

    connect(m_pWebSocket, SIGNAL(connected()), this,SLOT(onConnected()));
    connect(m_pWebSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
    connect(m_pWebSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError)));
    connect(m_pWebSocket, SIGNAL(textMessageReceived(QString)), this, SLOT(onTextMessage(QString)));
    connect(m_pWebSocket, SIGNAL(binaryMessageReceived(QByteArray)), this, SLOT(onBinaryMessage(QByteArray)));

    connect(m_pNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

    connect(m_pHeartBeatTimer, SIGNAL(timeout()), this, SLOT(sendHeartBeat()));

    //socket.io connections
    connect(this, SIGNAL(handshakeSucceeded()), this, SLOT(onHandshakeSucceeded()));

    //socket.io test connections
    connect(this, SIGNAL(heartbeatReceived()), this, SLOT(onHeartbeatReceived()));
}
Esempio n. 2
0
//0
void MavSerialPort::heartbeat_handler(){
    mavlink_msg_heartbeat_decode(&message, &heartbeat);
    emit heartbeatReceived();
}
Esempio n. 3
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;
            }
        }
    }
}