#include "stomp.h" Stomp::Stomp() { for(int i = 0; i< MAX_OBSERVER; i++) { observer_[i] = nullptr; } socket_.setPeerVerifyMode(QSslSocket::VerifyNone); QObject::connect(&socket_, &QSslSocket::readyRead, [&] { STOMPFrame frame = STOMPFrame::receive(socket_); switch(frame.command()) { case STOMPFrame::CONNECTED: qDebug() << "Connected !" << Qt::endl << "Version:" << frame.headers().value("version"); notifyConnectConfirmation(true,frame.headers().value("version")); break; case STOMPFrame::MESSAGE: notifyReceiveIndication(1, frame.headers().value("destination"), frame.body()); qDebug() << "Message" << Qt::endl; break; case STOMPFrame::RECEIPT: notifySendConfirmation(true); qDebug() << "Succesfully send" << Qt::endl; break; case STOMPFrame::ERROR: notifyConnectConfirmation(false,frame.headers().value("version")); notifySendConfirmation(false); qDebug() << Qt::endl << "-----ERROR-----" << Qt::endl << "Command: " << frame.command() << Qt::endl << "Header: " << frame.headers() << Qt::endl << "Body: " << frame.body() << Qt::endl << Qt::endl; break; default: qDebug() << Qt::endl << "-----Other STOMP frame-----" << Qt::endl << "Command: " << frame.command() << Qt::endl << "Header: " << frame.headers() << Qt::endl << "Body: " << frame.body() << Qt::endl << Qt::endl; break; } }); } Stomp::~Stomp() { } bool Stomp::subscribe(interface::iStompObserver* obs) { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] == nullptr) { observer_[i] = obs; return true; } } return false; } void Stomp::unsubscribe(interface::iStompObserver* obs) { for(int i = 0; i < MAX_OBSERVER; i++) { if(observer_[i] == obs) { observer_[i] = nullptr; } } } int Stomp::connectRequest(QString host, int port, QString vhost, QString username, QString password) { socket_.connectToHostEncrypted(host, port); if(!socket_.waitForConnected()) return -1; STOMPFrame(STOMPFrame::STOMP, { {"accept-version", "1.2"}, {"host", vhost}, {"login", username}, {"passcode", password} }).send(socket_); return 0; } void Stomp::sendRequest(QString destination, const QByteArray& body) { STOMPFrame(STOMPFrame::SEND, { {"destination", destination}, }, body).send(socket_); } void Stomp::subscribeRequest(QString destination, int id) { QString sid = QString::number(id); STOMPFrame(STOMPFrame::SUBSCRIBE, { {"destination", destination}, {"id", sid} }).send(socket_); } void Stomp::disconnectRequest() { } void Stomp::notifyConnectConfirmation(bool success, QString version) { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] != nullptr){ observer_[i]->connectConfirmation(success, version); } } } void Stomp::notifySendConfirmation(bool success) { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] != nullptr){ observer_[i]->sendConfirmation(success); } } } void Stomp::notifySubscribeConfirmation(bool success) { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] != nullptr){ observer_[i]->subscribeConfirmation(success); } } } void Stomp::notifyReceiveIndication(int id, QString destination, QString body) { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] != nullptr){ observer_[i]->receiveIndication(id, destination, body); } } } void Stomp::notifyDisconnectConfirmation() { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] != nullptr){ observer_[i]->disconnectConfirmation(); } } } void Stomp::notifyDisconnectIndication() { for(int i = 0; i < MAX_OBSERVER; i++) { if (observer_[i] != nullptr){ observer_[i]->disconnectIndication(); } } }