Implementing link priorities
Now that devices can potentially be connected via both network and bluetooth simultaneously we should prioritise connections over the highest performing link (probably wifi/network). To this end the m_deviceLinks are now sorted based on priority with the fastest links first; this means that when Device::sendPacket is scheduling to send a packet, it should always use the fastest link first.
This commit is contained in:
parent
2d770b780a
commit
ad75b438cb
8 changed files with 29 additions and 1 deletions
|
@ -37,6 +37,11 @@ public:
|
|||
return QStringLiteral("BluetoothLinkProvider");
|
||||
}
|
||||
|
||||
int priority() override
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
virtual void onNetworkChange() override;
|
||||
virtual void onStart() override;
|
||||
|
|
|
@ -14,6 +14,7 @@ DeviceLink::DeviceLink(const QString &deviceId, LinkProvider *parent)
|
|||
connect(this, &QObject::destroyed, [this, deviceId, parent]() {
|
||||
parent->onLinkDestroyed(deviceId, this);
|
||||
});
|
||||
this->priorityFromProvider = parent->priority();
|
||||
}
|
||||
|
||||
#include "moc_devicelink.cpp"
|
||||
|
|
|
@ -25,10 +25,18 @@ public:
|
|||
return deviceInfo().id;
|
||||
}
|
||||
|
||||
int priority() const
|
||||
{
|
||||
return priorityFromProvider;
|
||||
}
|
||||
|
||||
virtual bool sendPacket(NetworkPacket &np) = 0;
|
||||
|
||||
virtual DeviceInfo deviceInfo() const = 0;
|
||||
|
||||
private:
|
||||
int priorityFromProvider;
|
||||
|
||||
Q_SIGNALS:
|
||||
void receivedPacket(const NetworkPacket &np);
|
||||
};
|
||||
|
|
|
@ -43,6 +43,11 @@ public:
|
|||
return QStringLiteral("LanLinkProvider");
|
||||
}
|
||||
|
||||
int priority() override
|
||||
{
|
||||
return 20;
|
||||
}
|
||||
|
||||
void sendUdpIdentityPacket(const QList<QHostAddress> &addresses);
|
||||
|
||||
static void configureSslSocket(QSslSocket *socket, const QString &deviceId, bool isDeviceTrusted);
|
||||
|
|
|
@ -22,6 +22,7 @@ public:
|
|||
LinkProvider();
|
||||
|
||||
virtual QString name() = 0;
|
||||
virtual int priority() = 0;
|
||||
|
||||
public Q_SLOTS:
|
||||
virtual void onStart() = 0;
|
||||
|
|
|
@ -22,6 +22,10 @@ public:
|
|||
{
|
||||
return QStringLiteral("LoopbackLinkProvider");
|
||||
}
|
||||
int priority() override
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void onStart() override;
|
||||
void onStop() override;
|
||||
|
|
|
@ -158,7 +158,7 @@ void Daemon::onNewDeviceLink(DeviceLink *link)
|
|||
{
|
||||
QString id = link->deviceId();
|
||||
|
||||
// qCDebug(KDECONNECT_CORE) << "Device discovered" << id << "via" << dl->name();
|
||||
qCDebug(KDECONNECT_CORE) << "Device discovered" << id << "via link with priority" << link->priority();
|
||||
|
||||
if (d->m_devices.contains(id)) {
|
||||
qCDebug(KDECONNECT_CORE) << "It is a known device" << link->deviceInfo().name;
|
||||
|
|
|
@ -276,6 +276,10 @@ void Device::addLink(DeviceLink *link)
|
|||
|
||||
d->m_deviceLinks.append(link);
|
||||
|
||||
std::sort(d->m_deviceLinks.begin(), d->m_deviceLinks.end(), [](DeviceLink *a, DeviceLink *b) {
|
||||
return a->priority() > b->priority();
|
||||
});
|
||||
|
||||
connect(link, &QObject::destroyed, this, &Device::linkDestroyed);
|
||||
connect(link, &DeviceLink::receivedPacket, this, &Device::privateReceivedPacket);
|
||||
|
||||
|
|
Loading…
Reference in a new issue