Emit connectionLost *after* connectionReceived
To prevent destroying and recreating the same device again
This commit is contained in:
parent
f194ab9a52
commit
046d01c16d
1 changed files with 17 additions and 13 deletions
|
@ -88,14 +88,6 @@ void BroadcastTcpLinkProvider::newUdpConnection()
|
|||
return;
|
||||
}
|
||||
|
||||
const QString& id = np->get<QString>("deviceId");
|
||||
if (links.contains(id)) {
|
||||
//Delete old link if we already know it, probably it is down if this happens.
|
||||
qDebug() << "Destroying old link";
|
||||
delete links[id];
|
||||
links.remove(id);
|
||||
}
|
||||
|
||||
int tcpPort = np->get<int>("tcpPort",port);
|
||||
|
||||
qDebug() << "Received Udp presentation from" << sender << "asking for a tcp connection on port " << tcpPort;
|
||||
|
@ -107,6 +99,7 @@ void BroadcastTcpLinkProvider::newUdpConnection()
|
|||
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectError()));
|
||||
socket->connectToHost(sender, tcpPort);
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
delete np;
|
||||
|
@ -147,6 +140,9 @@ void BroadcastTcpLinkProvider::connected()
|
|||
|
||||
connect(dl,SIGNAL(destroyed(QObject*)),this,SLOT(deviceLinkDestroyed(QObject*)));
|
||||
|
||||
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
||||
DeviceLink* oldLink = (oldLinkIterator == links.end())? 0 : oldLinkIterator.value();
|
||||
|
||||
links[id] = dl;
|
||||
|
||||
NetworkPackage np2("");
|
||||
|
@ -165,6 +161,11 @@ void BroadcastTcpLinkProvider::connected()
|
|||
delete dl;
|
||||
}
|
||||
|
||||
if (oldLink) {
|
||||
Q_EMIT onConnectionLost(oldLink);
|
||||
delete oldLink;
|
||||
}
|
||||
|
||||
receivedIdentityPackages.remove(socket);
|
||||
delete np;
|
||||
|
||||
|
@ -208,11 +209,9 @@ void BroadcastTcpLinkProvider::dataReceived()
|
|||
|
||||
connect(dl,SIGNAL(destroyed(QObject*)),this,SLOT(deviceLinkDestroyed(QObject*)));
|
||||
|
||||
if (links.contains(id)) {
|
||||
//Delete old link if we already know it, probably it is down if this happens.
|
||||
qDebug() << "Destroying old link";
|
||||
delete links[id];
|
||||
}
|
||||
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
||||
DeviceLink* oldLink = (oldLinkIterator == links.end())? 0 : oldLinkIterator.value();
|
||||
|
||||
links[id] = dl;
|
||||
|
||||
//qDebug() << "BroadcastTcpLinkProvider creating link to device" << id << "(" << socket->peerAddress() << ")";
|
||||
|
@ -221,6 +220,11 @@ void BroadcastTcpLinkProvider::dataReceived()
|
|||
|
||||
Q_EMIT onConnectionReceived(np, dl);
|
||||
|
||||
if (oldLink) {
|
||||
Q_EMIT onConnectionLost(oldLink);
|
||||
delete oldLink;
|
||||
}
|
||||
|
||||
disconnect(socket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
|
||||
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue