У меня есть Фрагмент кода 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 ? Я просто пытаюсь получить данные тикера и назначить его объекту или переменной.
Я даже не могу установить базовое соединение. Я еще не обращался к обработке ошибок. Можете ли вы объяснить свой ответ немного подробнее? –
Qt нуждается в потоке для отправки сигналов, к которым вы подключаете свои слоты, это то, что происходит, когда вы вызываете 'a.exec()', Qt внутренне входит в цикл событий и запускает события накачки. Пока вы не запустили цикл событий, никакие сигналы не будут доставлены, поэтому никто из ваших обработчиков не будет вызван. Поэтому рекомендуется удалить вызов waitForConnected() и проверить, что происходит, когда вы вводите цикл событий. Событие, которое содержит документация Qt. Примечание. Эта функция может случайно произойти в Windows. Рассмотрите возможность использования цикла событий и подключенного() сигнала, если ваше программное обеспечение будет работать в Windows. '. –