2014-10-17 3 views
0

У меня есть Фрагмент кода JavaScript, который подключается к службе толкателя, что мне нужно, чтобы преобразовать в C++Qt WebSockets для подключения к службе Pusher

<script src="//js.pusher.com/2.2/pusher.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
var pusher = new Pusher("cb65d0a7a72cd94adf1f"); 
var channel = pusher.subscribe("ticker.155"); 
channel.bind("message", function(data) { 
     //console.log(data); 
     var topbuy = data.trade.topbuy; 
     var topsell = data.trade.topsell; 
     console.log("Buy Price: ", topbuy.price, 
       "Buy Quantity:", topbuy.quantity), 
     console.log("Sell Price: ", topsell.price, 
       "Sell Quantity:", topsell.quantity); 
}); 
</script> 

Я был в состоянии бюст открыть пакет подключения, чтобы получить небольшое представление о что происходит http://i.imgur.com/4iYIdLz.png Но я не могу получить соединение.

socketclass.cpp

#include "socketclass.h" 

socketClass::socketClass(QObject *parent) : 
    QObject(parent) 
{ 
} 

void socketClass::Test() 
{ 
    socket = new QTcpSocket(this); 
    connect(socket,SIGNAL(connected()), this, SLOT(connected())); 
    connect(socket,SIGNAL(disconnected()), this, SLOT(disconnected())); 
    connect(socket,SIGNAL(readyRead()), this, SLOT(readyRead())); 
    connect(socket,SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64))); 

    qDebug() << "......Connecting"; 

    socket->connectToHost("ws.pusherapp.com/app/cb65d0a7a72cd94adf1f?protocol=7&client=js&version=2.2.3&flash=false",80); 

    if(!socket->waitForConnected(1000)) 
    { 
     qDebug() << "Error: " << socket->errorString(); 
    } 

} 

void socketClass::connected() 
{ 
    //meat and potatoes goes here 
    qDebug() << "......Connected"; 
    //socket->write("HEAD/HTTP/1.0\r\n\r\n\r\n"); 
    socket->event(); 
} 

void socketClass::disconnected() 
{ 
    qDebug() << "......Disconnected"; 
} 

void socketClass::bytesWritten (qint64 bytes) 
{ 
    qDebug() << "We wrote: " << bytes; 
} 

void socketClass::readyRead() 
{ 
    qDebug() << "Reading..,,"; 
    qDebug() << socket->readAll(); 
} 

socketclass.h

#ifndef SOCKETCLASS_H 
#define SOCKETCLASS_H 
#include <QDebug> 
#include <QObject> 
#include <QTcpSocket> 
#include <QAbstractSocket> 

class socketClass : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit socketClass(QObject *parent = 0); 
    void Test(); 

signals: 


public slots: 
    void connected(); 
    void disconnected(); 
    void bytesWritten (qint64 bytes); 
    void readyRead(); 

private: 
    QTcpSocket *socket; 

}; 

#endif // SOCKETCLASS_H 

main.cpp

#include <QCoreApplication> 
#include "socketclass.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    socketClass mTest; 
    mTest.Test(); 

    return a.exec(); 
} 

Каковы правильные параметры подключения следует использовать с C++ WebSockets эмулировать Javascript ? Я просто пытаюсь получить данные тикера и назначить его объекту или переменной.

ответ

0

Мой опыт работы в Qt немного устарел, но из того, что я вижу, вы не получите сигналы, так как у вас нет цикла событий. Вы не должны использовать вызов waitForConnected, вы должны либо запустить a.exec(), и позволить ему заботиться о перекачке событий. Единственное, что кажется странным, это то, что вы вызываете waitForConnected, скорее всего, получите сообщение об ошибке, но по-прежнему вызываете a.exec() , но не получаете сигналы после этого (или, может быть, вы прекратите приложение после сбоя?).

+0

Я даже не могу установить базовое соединение. Я еще не обращался к обработке ошибок. Можете ли вы объяснить свой ответ немного подробнее? –

+0

Qt нуждается в потоке для отправки сигналов, к которым вы подключаете свои слоты, это то, что происходит, когда вы вызываете 'a.exec()', Qt внутренне входит в цикл событий и запускает события накачки. Пока вы не запустили цикл событий, никакие сигналы не будут доставлены, поэтому никто из ваших обработчиков не будет вызван. Поэтому рекомендуется удалить вызов waitForConnected() и проверить, что происходит, когда вы вводите цикл событий. Событие, которое содержит документация Qt. Примечание. Эта функция может случайно произойти в Windows. Рассмотрите возможность использования цикла событий и подключенного() сигнала, если ваше программное обеспечение будет работать в Windows. '. –

Смежные вопросы