Handle multiple connections properly.
This commit is contained in:
parent
9e2e684124
commit
c42fc53980
@ -52,7 +52,7 @@ class IPCServer(QObject):
|
|||||||
raise IPCError("Error while listening to IPC server: {} "
|
raise IPCError("Error while listening to IPC server: {} "
|
||||||
"(error {})".format(self._server.errorString(),
|
"(error {})".format(self._server.errorString(),
|
||||||
self._server.serverError()))
|
self._server.serverError()))
|
||||||
self._server.newConnection.connect(self.on_connection)
|
self._server.newConnection.connect(self.handle_connection)
|
||||||
self._socket = None
|
self._socket = None
|
||||||
|
|
||||||
def _remove_server(self):
|
def _remove_server(self):
|
||||||
@ -69,14 +69,16 @@ class IPCServer(QObject):
|
|||||||
_socket_error("handling IPC connection", self._socket)
|
_socket_error("handling IPC connection", self._socket)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_connection(self):
|
def handle_connection(self):
|
||||||
"""Slot for a new connection for the local socket."""
|
"""Handle a new connection to the server."""
|
||||||
socket = self._server.nextPendingConnection()
|
|
||||||
if self._socket is not None:
|
if self._socket is not None:
|
||||||
# We already have a connection running, so we refuse this one.
|
# We already have a connection running, so we don't handle this one
|
||||||
socket.close()
|
# yet.
|
||||||
socket.deleteLater()
|
return
|
||||||
else:
|
socket = self._server.nextPendingConnection()
|
||||||
|
if socket is None:
|
||||||
|
# No new pending connections.
|
||||||
|
return
|
||||||
socket.readyRead.connect(self.on_ready_read)
|
socket.readyRead.connect(self.on_ready_read)
|
||||||
socket.disconnected.connect(self.on_disconnected)
|
socket.disconnected.connect(self.on_disconnected)
|
||||||
socket.error.connect(self.on_error)
|
socket.error.connect(self.on_error)
|
||||||
@ -87,6 +89,8 @@ class IPCServer(QObject):
|
|||||||
"""Clean up socket when the client disconnected."""
|
"""Clean up socket when the client disconnected."""
|
||||||
self._socket.deleteLater()
|
self._socket.deleteLater()
|
||||||
self._socket = None
|
self._socket = None
|
||||||
|
# Maybe another connection is waiting.
|
||||||
|
self.handle_connection()
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_ready_read(self):
|
def on_ready_read(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user