diff options
| author | 2016-04-20 13:23:34 +0200 | |
|---|---|---|
| committer | 2016-04-20 13:23:34 +0200 | |
| commit | 0df1229461ea6ea9d7f28f17efc0ba10ca8b8a42 (patch) | |
| tree | db3b6fcfa4efe07eb4a2b52d0bb436e864476985 /src/modules/objects | |
| parent | popups: cleanup conditional visibility / rename option / add channel (diff) | |
| download | KVIrc-0df1229461ea6ea9d7f28f17efc0ba10ca8b8a42.tar.gz KVIrc-0df1229461ea6ea9d7f28f17efc0ba10ca8b8a42.tar.bz2 KVIrc-0df1229461ea6ea9d7f28f17efc0ba10ca8b8a42.zip | |
Fix in kvs socket class: incomingConnectionEvent
Diffstat (limited to 'src/modules/objects')
| -rw-r--r-- | src/modules/objects/KvsObject_socket.cpp | 18 | ||||
| -rw-r--r-- | src/modules/objects/KvsObject_socket.h | 8 |
2 files changed, 15 insertions, 11 deletions
diff --git a/src/modules/objects/KvsObject_socket.cpp b/src/modules/objects/KvsObject_socket.cpp index 1f64b4043..b084f1655 100644 --- a/src/modules/objects/KvsObject_socket.cpp +++ b/src/modules/objects/KvsObject_socket.cpp @@ -303,6 +303,7 @@ bool KvsObject_socket::init(KviKvsRunTimeContext *c,KviKvsVariantList *) m_pServer = 0; m_pContext = c ; makeConnections(); + bIsSetFromExternal = false; return true; } @@ -311,11 +312,14 @@ KVSO_BEGIN_CONSTRUCTOR(KvsObject_socket,KviKvsObject) KVSO_END_CONSTRUCTOR(KvsObject_socket) KVSO_BEGIN_DESTRUCTOR(KvsObject_socket) - if (m_pSocket) + if (m_pSocket && !bIsSetFromExternal) + { + m_pSocket->close(); delete m_pSocket; + } m_pSocket = 0; if (m_pServer) - delete m_pServer; + delete m_pServer; m_pServer = 0; KVSO_END_DESTRUCTOR(KvsObject_socket) //---------------------- @@ -676,18 +680,18 @@ void KvsObject_socket::slotStateChanged( QAbstractSocket::SocketState socketStat void KvsObject_socket::slotNewConnection() { - qDebug ("New connection"); QTcpSocket *pSocket = m_pServer->nextPendingConnection(); KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("socket"); KviKvsVariantList lParams; - KviKvsObject * pObject = pClass->allocateInstance(0,"internalsocket",m_pContext,&lParams); + KviKvsObject * pObject = pClass->allocateInstance(this,"internalsocket",m_pContext,&lParams); ((KvsObject_socket *)pObject)->setInternalSocket(pSocket); kvs_hobject_t hobj=pObject->handle(); KviKvsVariantList params(new KviKvsVariant(hobj)); bool ret=false; - KviKvsVariant *retv=new KviKvsVariant(ret); - callFunction(this,"incomingConnectionEvent",retv,¶ms); - if (retv) + KviKvsVariant retv(ret); + callFunction(this,"incomingConnectionEvent",&retv,¶ms); + ret=retv.asBoolean(); + if (ret) { pObject=KviKvsKernel::instance()->objectController()->lookupObject(hobj); if (pObject) pObject->dieNow(); diff --git a/src/modules/objects/KvsObject_socket.h b/src/modules/objects/KvsObject_socket.h index d4ec6a625..bec11b60f 100644 --- a/src/modules/objects/KvsObject_socket.h +++ b/src/modules/objects/KvsObject_socket.h @@ -39,6 +39,7 @@ protected: QAbstractSocket *m_pSocket; QTcpServer *m_pServer; KviKvsRunTimeContext *m_pContext; + bool bIsSetFromExternal; protected: virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams); const char * getStateString(QAbstractSocket::SocketState); @@ -47,6 +48,8 @@ protected: { delete m_pSocket; m_pSocket=pSocket; + bIsSetFromExternal = true; + makeConnections(); } bool status(KviKvsObjectFunctionCall *c); @@ -55,16 +58,13 @@ protected: bool localPort(KviKvsObjectFunctionCall *c); bool localIp(KviKvsObjectFunctionCall *c); bool functionConnect(KviKvsObjectFunctionCall *c); - bool close(KviKvsObjectFunctionCall *c); bool read(KviKvsObjectFunctionCall *c); bool write(KviKvsObjectFunctionCall *c); bool bytesAvailable(KviKvsObjectFunctionCall *c); bool setProtocol(KviKvsObjectFunctionCall *c); //bool setReadBufferSize(KviKvsObjectFunctionCall *c); - bool listen(KviKvsObjectFunctionCall *c); - - + bool listen(KviKvsObjectFunctionCall *c); bool dataAvailableEvent(KviKvsObjectFunctionCall *c); bool incomingConnectionEvent(KviKvsObjectFunctionCall *c); bool connectedEvent(KviKvsObjectFunctionCall *c); |
