nymea-app/backend/connectionmanager.cpp

130 lines
3.0 KiB
C++

#include "connectionmanager.h"
#include <QState>
#include <QSettings>
ConnectionManager::ConnectionManager(QObject *parent) :
QObject(parent),
m_discovery(new UpnpDiscovery(this)),
m_interface(0),
m_websocketInterface(new WebsocketInterface(this)),
m_bluetoothInterface(new BluetoothInterface(this))
{
}
GuhInterface *ConnectionManager::interface()
{
return m_interface;
}
UpnpDiscovery *ConnectionManager::upnpDiscovery()
{
return m_discovery;
}
WebsocketInterface *ConnectionManager::websocketInterface()
{
return m_websocketInterface;
}
BluetoothInterface *ConnectionManager::bluetoothInterface()
{
return m_bluetoothInterface;
}
QString ConnectionManager::currentInterfaceName() const
{
return m_currentInterfaceName;
}
QString ConnectionManager::currentStatusMessage() const
{
return m_currentStatusMessage;
}
void ConnectionManager::setInterface(GuhInterface *interface)
{
if (m_interface) {
disconnect(m_interface, &GuhInterface::connectedChanged, this, &ConnectionManager::onConnectedChanged);
disconnect(m_interface, &GuhInterface::dataReady, this, &ConnectionManager::dataReady);
}
m_interface = interface;
connect(m_interface, &GuhInterface::connectedChanged, this, &ConnectionManager::onConnectedChanged);
connect(m_interface, &GuhInterface::dataReady, this, &ConnectionManager::dataReady);
emit interfaceChanged();
}
void ConnectionManager::setCurrentInterfaceName(const QString &name)
{
m_currentInterfaceName = name;
emit currentInterfaceNameChanged();
}
void ConnectionManager::setCurrentStatusMessage(const QString &message)
{
m_currentStatusMessage = message;
emit currentStatusMessageChanged();
}
void ConnectionManager::onConnectedChanged()
{
if (m_interface->connected())
emit connected();
else
emit disconnect();
emit connectedChanged();
}
void ConnectionManager::onConnectingState()
{
QSettings settings;
qDebug() << "Loading last connection" << settings.fileName();
settings.beginGroup("Connections");
QString url = settings.value("webSocketUrl").toString();
settings.endGroup();
if (url.isEmpty()) {
qDebug() << "No stored websocket url";
m_websocketInterface->connectionFailed();
}
m_websocketInterface->setUrl(url);
m_websocketInterface->enable();
}
void ConnectionManager::onUpnpDiscoveringState()
{
upnpDiscovery()->discover();
}
void ConnectionManager::start(const ConnectionType &connectionType)
{
switch (connectionType) {
case ConnectionTypeAuto:
setInterface(m_websocketInterface);
break;
case ConnectionTypeWebSocket:
setInterface(m_websocketInterface);
m_discovery->discover();
break;
case ConnectionTypeCloud:
break;
case ConnectionTypeBluetooth:
setInterface(m_bluetoothInterface);
break;
default:
setInterface(m_bluetoothInterface);
break;
}
}
void ConnectionManager::stop()
{
m_interface->disable();
}