This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
Simon Stuerz 3bf97a7e0d RF plugins added and made more stable
played with the client gui
2013-09-06 09:54:14 +02:00

122 lines
2.9 KiB
C++

#include "client.h"
#include <QDebug>
#include <QJsonDocument>
Client::Client(QObject *parent) :
QObject(parent)
{
m_tcpSocket = new QTcpSocket(this);
m_connectionStatus = false;
connect(m_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectionError(QAbstractSocket::SocketError)));
connect(m_tcpSocket, SIGNAL(connected()),this, SLOT(connected()));
connect(m_tcpSocket, SIGNAL(disconnected()),this, SLOT(disconneted()));
}
bool Client::isConnected()
{
return m_connectionStatus;
}
void Client::connectionError(QAbstractSocket::SocketError error)
{
qDebug() << "---> connection error:" << error;
}
void Client::readData()
{
QByteArray message;
while(m_tcpSocket->canReadLine()){
QByteArray dataLine = m_tcpSocket->readLine();
message.append(dataLine);
if(dataLine == "}\n"){
emit dataAvailable(message);
}
}
}
void Client::connected()
{
qDebug() << "connected to hive server";
m_connectionStatus = true;
emit connectionChanged();
}
void Client::disconneted()
{
qDebug() << "disconnect from hive server";
m_connectionStatus = false;
emit connectionChanged();
}
void Client::processData(const QByteArray &data)
{
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if(error.error != QJsonParseError::NoError) {
qDebug() << "failed to parse data" << data << ":" << error.errorString();
}
qDebug() << "-------------------------\n" << jsonDoc.toJson();
QVariantMap command = jsonDoc.toVariant().toMap();
QVariantMap params = jsonDoc.toVariant().toMap().value("params").toMap();
if(command.contains("signal")){
handleSignal(params);
}else{
handleResponse(params);
}
}
void Client::handleResponse(const QVariantMap &rsp)
{
qDebug() << "handling response" << rsp;
if(!rsp.contains("id")) {
qDebug() << "packet does not contain an id. discarding...";
return;
}
int id = rsp.value("id").toInt();
if(m_requestMap.contains(id)) {
switch(m_requestMap.value(id)){
case RequestAddDevice:
qDebug() << "add device response received";
break;
case RequestEditDevice:
qDebug() << "edit device response received";
break;
case RequestRemoveDevice:
qDebug() << "add device response received";
break;
}
m_requestMap.remove(id);
}
}
void Client::handleSignal(const QVariantMap &signal)
{
}
void Client::connectToHost(QString ipAddress, QString port)
{
qDebug() << "connecting to" << ipAddress << ":" << port;
m_tcpSocket->connectToHost(QHostAddress(ipAddress), port.toInt());
}
void Client::disconnectFromHost()
{
m_tcpSocket->close();
qDebug() << "connection to hive server closed";
}
void Client::sendData(QByteArray data)
{
m_tcpSocket->write(data);
}