Bugfix: access by id caused removal of wrong link
This commit is contained in:
parent
046d01c16d
commit
12c0c940a7
1 changed files with 27 additions and 14 deletions
|
@ -134,17 +134,16 @@ void BroadcastTcpLinkProvider::connected()
|
||||||
|
|
||||||
NetworkPackage* np = receivedIdentityPackages[socket].np;
|
NetworkPackage* np = receivedIdentityPackages[socket].np;
|
||||||
const QString& id = np->get<QString>("deviceId");
|
const QString& id = np->get<QString>("deviceId");
|
||||||
qDebug() << "Connected" << socket->isWritable();
|
//qDebug() << "Connected" << socket->isWritable();
|
||||||
|
|
||||||
TcpDeviceLink* dl = new TcpDeviceLink(id, this, socket);
|
TcpDeviceLink* dl = new TcpDeviceLink(id, this, socket);
|
||||||
|
|
||||||
connect(dl,SIGNAL(destroyed(QObject*)),this,SLOT(deviceLinkDestroyed(QObject*)));
|
connect(dl, SIGNAL(destroyed(QObject*)),
|
||||||
|
this, SLOT(deviceLinkDestroyed(QObject*)));
|
||||||
|
|
||||||
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
||||||
DeviceLink* oldLink = (oldLinkIterator == links.end())? 0 : oldLinkIterator.value();
|
DeviceLink* oldLink = (oldLinkIterator == links.end())? 0 : oldLinkIterator.value();
|
||||||
|
|
||||||
links[id] = dl;
|
|
||||||
|
|
||||||
NetworkPackage np2("");
|
NetworkPackage np2("");
|
||||||
NetworkPackage::createIdentityPackage(&np2);
|
NetworkPackage::createIdentityPackage(&np2);
|
||||||
|
|
||||||
|
@ -152,8 +151,18 @@ void BroadcastTcpLinkProvider::connected()
|
||||||
|
|
||||||
//TODO: Use reverse connection too to preffer connecting a unstable device (a phone) to a stable device (a computer)
|
//TODO: Use reverse connection too to preffer connecting a unstable device (a phone) to a stable device (a computer)
|
||||||
if (success) {
|
if (success) {
|
||||||
|
|
||||||
qDebug() << "Handshaking done (i'm the existing device)";
|
qDebug() << "Handshaking done (i'm the existing device)";
|
||||||
|
|
||||||
|
links[id] = dl;
|
||||||
Q_EMIT onConnectionReceived(*np, dl);
|
Q_EMIT onConnectionReceived(*np, dl);
|
||||||
|
|
||||||
|
if (oldLink) {
|
||||||
|
disconnect(oldLink, SIGNAL(destroyed(QObject*)),
|
||||||
|
this, SLOT(deviceLinkDestroyed(QObject*)));
|
||||||
|
delete oldLink;
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//I think this will never happen
|
//I think this will never happen
|
||||||
qDebug() << "Fallback (2), try reverse connection";
|
qDebug() << "Fallback (2), try reverse connection";
|
||||||
|
@ -161,12 +170,8 @@ void BroadcastTcpLinkProvider::connected()
|
||||||
delete dl;
|
delete dl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldLink) {
|
|
||||||
Q_EMIT onConnectionLost(oldLink);
|
|
||||||
delete oldLink;
|
|
||||||
}
|
|
||||||
|
|
||||||
receivedIdentityPackages.remove(socket);
|
receivedIdentityPackages.remove(socket);
|
||||||
|
|
||||||
delete np;
|
delete np;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -207,7 +212,8 @@ void BroadcastTcpLinkProvider::dataReceived()
|
||||||
const QString& id = np.get<QString>("deviceId");
|
const QString& id = np.get<QString>("deviceId");
|
||||||
TcpDeviceLink* dl = new TcpDeviceLink(id, this, socket);
|
TcpDeviceLink* dl = new TcpDeviceLink(id, this, socket);
|
||||||
|
|
||||||
connect(dl,SIGNAL(destroyed(QObject*)),this,SLOT(deviceLinkDestroyed(QObject*)));
|
connect(dl, SIGNAL(destroyed(QObject*)),
|
||||||
|
this, SLOT(deviceLinkDestroyed(QObject*)));
|
||||||
|
|
||||||
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
||||||
DeviceLink* oldLink = (oldLinkIterator == links.end())? 0 : oldLinkIterator.value();
|
DeviceLink* oldLink = (oldLinkIterator == links.end())? 0 : oldLinkIterator.value();
|
||||||
|
@ -221,10 +227,11 @@ void BroadcastTcpLinkProvider::dataReceived()
|
||||||
Q_EMIT onConnectionReceived(np, dl);
|
Q_EMIT onConnectionReceived(np, dl);
|
||||||
|
|
||||||
if (oldLink) {
|
if (oldLink) {
|
||||||
Q_EMIT onConnectionLost(oldLink);
|
disconnect(oldLink, SIGNAL(destroyed(QObject*)),
|
||||||
|
this, SLOT(deviceLinkDestroyed(QObject*)));
|
||||||
delete oldLink;
|
delete oldLink;
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(socket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
|
disconnect(socket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -235,10 +242,16 @@ void BroadcastTcpLinkProvider::dataReceived()
|
||||||
|
|
||||||
void BroadcastTcpLinkProvider::deviceLinkDestroyed(QObject* uncastedDeviceLink)
|
void BroadcastTcpLinkProvider::deviceLinkDestroyed(QObject* uncastedDeviceLink)
|
||||||
{
|
{
|
||||||
|
qDebug() << "deviceLinkDestroyed";
|
||||||
|
|
||||||
DeviceLink* deviceLink = (DeviceLink*)uncastedDeviceLink;
|
DeviceLink* deviceLink = (DeviceLink*)uncastedDeviceLink;
|
||||||
Q_EMIT onConnectionLost(deviceLink);
|
|
||||||
const QString& id = deviceLink->deviceId();
|
const QString& id = deviceLink->deviceId();
|
||||||
if (links.contains(id)) links.remove(id);
|
|
||||||
|
QMap< QString, DeviceLink* >::iterator oldLinkIterator = links.find(id);
|
||||||
|
if (oldLinkIterator != links.end() && oldLinkIterator.value() == deviceLink) {
|
||||||
|
links.erase(oldLinkIterator);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BroadcastTcpLinkProvider::~BroadcastTcpLinkProvider()
|
BroadcastTcpLinkProvider::~BroadcastTcpLinkProvider()
|
||||||
|
|
Loading…
Reference in a new issue