158 lines
4.2 KiB
C++
158 lines
4.2 KiB
C++
#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();
|
|
}
|
|
}
|
|
}
|
|
|