Split IPCServer.on_ready_read into two methods
This commit is contained in:
parent
7c3361d8da
commit
fd20b46b33
@ -288,6 +288,55 @@ class IPCServer(QObject):
|
|||||||
self._socket.error.connect(self.on_error)
|
self._socket.error.connect(self.on_error)
|
||||||
self._socket.disconnectFromServer()
|
self._socket.disconnectFromServer()
|
||||||
|
|
||||||
|
def _handle_data(self, data):
|
||||||
|
"""Handle data (as bytes) we got from on_ready_ready_read."""
|
||||||
|
try:
|
||||||
|
decoded = data.decode('utf-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
log.ipc.error("invalid utf-8: {}".format(
|
||||||
|
binascii.hexlify(data)))
|
||||||
|
self._handle_invalid_data()
|
||||||
|
return
|
||||||
|
|
||||||
|
log.ipc.debug("Processing: {}".format(decoded))
|
||||||
|
try:
|
||||||
|
json_data = json.loads(decoded)
|
||||||
|
except ValueError:
|
||||||
|
log.ipc.error("invalid json: {}".format(decoded.strip()))
|
||||||
|
self._handle_invalid_data()
|
||||||
|
return
|
||||||
|
|
||||||
|
for name in ('args', 'target_arg'):
|
||||||
|
if name not in json_data:
|
||||||
|
log.ipc.error("Missing {}: {}".format(name, decoded.strip()))
|
||||||
|
self._handle_invalid_data()
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
protocol_version = int(json_data['protocol_version'])
|
||||||
|
except (KeyError, ValueError):
|
||||||
|
log.ipc.error("invalid version: {}".format(decoded.strip()))
|
||||||
|
self._handle_invalid_data()
|
||||||
|
return
|
||||||
|
|
||||||
|
if protocol_version != PROTOCOL_VERSION:
|
||||||
|
log.ipc.error("incompatible version: expected {}, got {}".format(
|
||||||
|
PROTOCOL_VERSION, protocol_version))
|
||||||
|
self._handle_invalid_data()
|
||||||
|
return
|
||||||
|
|
||||||
|
args = json_data['args']
|
||||||
|
|
||||||
|
target_arg = json_data['target_arg']
|
||||||
|
if target_arg is None:
|
||||||
|
# https://www.riverbankcomputing.com/pipermail/pyqt/2016-April/037375.html
|
||||||
|
target_arg = ''
|
||||||
|
|
||||||
|
cwd = json_data.get('cwd', '')
|
||||||
|
assert cwd is not None
|
||||||
|
|
||||||
|
self.got_args.emit(args, target_arg, cwd)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def on_ready_read(self):
|
def on_ready_read(self):
|
||||||
"""Read json data from the client."""
|
"""Read json data from the client."""
|
||||||
@ -302,55 +351,7 @@ class IPCServer(QObject):
|
|||||||
self.got_raw.emit(data)
|
self.got_raw.emit(data)
|
||||||
log.ipc.debug("Read from socket 0x{:x}: {}".format(
|
log.ipc.debug("Read from socket 0x{:x}: {}".format(
|
||||||
id(self._socket), data))
|
id(self._socket), data))
|
||||||
|
self._handle_data(data)
|
||||||
try:
|
|
||||||
decoded = data.decode('utf-8')
|
|
||||||
except UnicodeDecodeError:
|
|
||||||
log.ipc.error("invalid utf-8: {}".format(
|
|
||||||
binascii.hexlify(data)))
|
|
||||||
self._handle_invalid_data()
|
|
||||||
return
|
|
||||||
|
|
||||||
log.ipc.debug("Processing: {}".format(decoded))
|
|
||||||
try:
|
|
||||||
json_data = json.loads(decoded)
|
|
||||||
except ValueError:
|
|
||||||
log.ipc.error("invalid json: {}".format(decoded.strip()))
|
|
||||||
self._handle_invalid_data()
|
|
||||||
return
|
|
||||||
|
|
||||||
for name in ('args', 'target_arg'):
|
|
||||||
if name not in json_data:
|
|
||||||
log.ipc.error("Missing {}: {}".format(name,
|
|
||||||
decoded.strip()))
|
|
||||||
self._handle_invalid_data()
|
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
|
||||||
protocol_version = int(json_data['protocol_version'])
|
|
||||||
except (KeyError, ValueError):
|
|
||||||
log.ipc.error("invalid version: {}".format(decoded.strip()))
|
|
||||||
self._handle_invalid_data()
|
|
||||||
return
|
|
||||||
|
|
||||||
if protocol_version != PROTOCOL_VERSION:
|
|
||||||
log.ipc.error("incompatible version: expected {}, "
|
|
||||||
"got {}".format(
|
|
||||||
PROTOCOL_VERSION, protocol_version))
|
|
||||||
self._handle_invalid_data()
|
|
||||||
return
|
|
||||||
|
|
||||||
args = json_data['args']
|
|
||||||
|
|
||||||
target_arg = json_data['target_arg']
|
|
||||||
if target_arg is None:
|
|
||||||
# https://www.riverbankcomputing.com/pipermail/pyqt/2016-April/037375.html
|
|
||||||
target_arg = ''
|
|
||||||
|
|
||||||
cwd = json_data.get('cwd', '')
|
|
||||||
assert cwd is not None
|
|
||||||
|
|
||||||
self.got_args.emit(args, target_arg, cwd)
|
|
||||||
self._timer.start()
|
self._timer.start()
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
|
Loading…
Reference in New Issue
Block a user