diff -r 805fa9a27e9e -r 679e9b8912f5 QTfrontend/hwmap.cpp --- a/QTfrontend/hwmap.cpp Tue Sep 26 11:53:12 2006 +0000 +++ b/QTfrontend/hwmap.cpp Tue Sep 26 17:50:14 2006 +0000 @@ -4,11 +4,24 @@ #include +#include +#include + +#include + +int HWMap::isBusy(0); // initialize static variable +QList srvsList; +QMutex tcpSrvMut; + HWMap::HWMap() : m_isStarted(false) { } +HWMap::~HWMap() +{ +} + void HWMap::getImage(std::string seed) { m_seed=seed; @@ -24,9 +37,17 @@ IPCSocket->deleteLater(); IPCSocket = 0; IPCServer->close(); - deleteLater(); - + //deleteLater(); + + + tcpSrvMut.lock(); + if(isBusy) --isBusy; + //if(!isBusy) srvsList.pop_front();//lastStarted=0; + tcpSrvMut.unlock(); + qDebug() << "image emitted with seed " << QString(m_seed.c_str()); emit ImageReceived(im); + readbuffer.clear(); + emit isReadyNow(); } void HWMap::ClientRead() @@ -66,8 +87,40 @@ .arg(error) + bindir->absolutePath() + "/hwengine)"); } +void HWMap::tcpServerReady() +{ + qDebug() << "received signal, i am " << this << ";"; + qDebug() << srvsList.front() << " disconnected from " << *(++srvsList.begin()); + tcpSrvMut.lock(); + disconnect(srvsList.front(), SIGNAL(isReadyNow()), *(++srvsList.begin()), SLOT(tcpServerReady())); + srvsList.pop_front(); + tcpSrvMut.unlock(); + + RealStart(); +} + void HWMap::Start() { + tcpSrvMut.lock(); + if(!isBusy) { + qDebug() << "notBusy, i am " << this; + ++isBusy; + srvsList.push_back(this); + tcpSrvMut.unlock(); + } else { + qDebug() << "Busy, connected " << srvsList.back() << " to " << this; + connect(srvsList.back(), SIGNAL(isReadyNow()), this, SLOT(tcpServerReady())); + srvsList.push_back(this); + //deleteLater(); + tcpSrvMut.unlock(); + return; + } + + RealStart(); +} + +void HWMap::RealStart() +{ IPCServer = new QTcpServer(this); connect(IPCServer, SIGNAL(newConnection()), this, SLOT(NewConnection())); IPCServer->setMaxPendingConnections(1);