Hi Victor,
I happen to have done just that recently. I used QTcpServer, not sure if
it is the best way to do it, but it works with QGIS 1.7.4 and 1.8. I
think I used the PyQt examples. I hope it is of use.
from PyQt4 import QtCore, QtGui, QtSql, QtNetwork
class MyPlugin:
def __init__(self, iface):
self.startMyServer()
app = QgsApplication.instance()
QtCore.QObject.connect(app, QtCore.SIGNAL("aboutToQuit()"),
self.stopListening)
def stopListening(self):
if self.tcpServer:
self.tcpServer.close()
if self.tcpSocket:
self.tcpSocket.close()
def startMyServer(self):
'''create the server'''
self.tcpServer = QtNetwork.QTcpServer()
self.tcpSocket = None # initialize
if not self.tcpServer.listen(port=16500):
QtGui.QMessageBox.critical(None, "Tcp Server",
"Could not start the server: %s." \
% self.tcpServer.errorString())
return None
QtCore.QObject.connect(self.tcpServer,
QtCore.SIGNAL("newConnection()"), self.receiveMyData)
def receiveMyData(self):
'''slot to be called when a client connects to the server'''
if self.tcpServer.hasPendingConnections():
self.tcpSocket = self.tcpServer.nextPendingConnection()
self.tcpSocket.readyRead.connect(self.readMyData)
def readMyData(self):
'''Slot to read the data sent to the server'''
numbBytes = self.tcpSocket.bytesAvailable()
data = self.tcpSocket.read(numbBytes)
self.tcpSocket.close()
# do something witht the data
Am 19.06.2012 11:18, schrieb Víctor González:
Hi,
I'm trying to create a plugin that opens a socket server in a separate
thread and handles requests. I create the server using
SocketServer.TCPServer and threading.Thread in the initGui method and
the plugin starts correctly, but if I try to get a response from a
client, the server freezes and does not respond.
The strange thing is that I have added a toolbar button that opens and
closes a file and, if I click that button, the server unfreezes and I
get the response as expected. However, if I create the socket server
with the same exact code as an standalone program, it works as expected
without freezing.
I have looked into the PyQgis cookbook [1] and the contributed plugins
[2] searching for an example or solution but I couldn't find anything.
Does anyone know what may be wrong? Any hint will be greatly
appreciated. I attach the Qgis plugin as well as the standalone server
and client.
Thanks in advance,
Víctor.
_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Server.
http://www.nod32.com
_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer