Sun, 09 May 2021 14:30:41 +0200
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
346
877cac2e8d94
Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
326
diff
changeset
|
3 | # Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing the JSON based server base class. |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import json |
354
a967ff16629a
- implemented some code simplifications
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
353
diff
changeset
|
11 | import contextlib |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
320
91b171fdd85f
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
303
diff
changeset
|
13 | from PyQt5.QtCore import ( |
358
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
14 | pyqtSlot, QProcess, QProcessEnvironment, QCoreApplication, QEventLoop, |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
15 | QTimer |
320
91b171fdd85f
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
303
diff
changeset
|
16 | ) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | from PyQt5.QtNetwork import QTcpServer, QHostAddress |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | from E5Gui import E5MessageBox |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | import Preferences |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | import Utilities |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | class JsonServer(QTcpServer): |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | Class implementing the JSON based server base class. |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | """ |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
29 | def __init__(self, name="", multiplex=False, parent=None): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | Constructor |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
33 | @param name name of the server (used for output only) |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
34 | @type str |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
35 | @param multiplex flag indicating a multiplexing server |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
36 | @type bool |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | @param parent parent object |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | @type QObject |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | """ |
354
a967ff16629a
- implemented some code simplifications
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
353
diff
changeset
|
40 | super().__init__(parent) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
42 | self.__name = name |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
43 | self.__multiplex = multiplex |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
44 | if self.__multiplex: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
45 | self.__clientProcesses = {} |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
46 | self.__connections = {} |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
47 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
48 | self.__clientProcess = None |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
49 | self.__connection = None |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | # setup the network interface |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | networkInterface = Preferences.getDebugger("NetworkInterface") |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | if networkInterface == "all" or '.' in networkInterface: |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | # IPv4 |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | self.__hostAddress = '127.0.0.1' |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | else: |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | # IPv6 |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | self.__hostAddress = '::1' |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | self.listen(QHostAddress(self.__hostAddress)) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
61 | self.newConnection.connect(self.handleNewConnection) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | port = self.serverPort() |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
64 | ## Note: Need the port if client is started external in debugger. |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
65 | print('JSON server ({1}) listening on: {0:d}' # __IGNORE_WARNING__ |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
66 | .format(port, self.__name)) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | @pyqtSlot() |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
69 | def handleNewConnection(self): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | """ |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
71 | Public slot for new incoming connections from a client. |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | connection = self.nextPendingConnection() |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | if not connection.isValid(): |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | return |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
77 | if self.__multiplex: |
293
dd1c7ed6d880
Code Assist: started to move the Mouse Click handler to Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
285
diff
changeset
|
78 | if not connection.waitForReadyRead(1000): |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
79 | return |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
80 | idString = bytes(connection.readLine()).decode( |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
81 | "utf-8", 'backslashreplace').strip() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
82 | if idString in self.__connections: |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
83 | self.__connections[idString].close() |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
84 | self.__connections[idString] = connection |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
85 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
86 | idString = "" |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
87 | if self.__connection is not None: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
88 | self.__connection.close() |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
89 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
90 | self.__connection = connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
91 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
92 | connection.readyRead.connect( |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
93 | lambda: self.__receiveJson(idString)) |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
94 | connection.disconnected.connect( |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
95 | lambda: self.__handleDisconnect(idString)) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | @pyqtSlot() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
98 | def __handleDisconnect(self, idString): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
100 | Private slot handling a disconnect of the client. |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
101 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
102 | @param idString id of the connection been disconnected |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
103 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
105 | if idString: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
106 | if idString in self.__connections: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
107 | self.__connections[idString].close() |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
108 | del self.__connections[idString] |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
109 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
110 | if self.__connection is not None: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
111 | self.__connection.close() |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
112 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
113 | self.__connection = None |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
115 | def connectionNames(self): |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
116 | """ |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
117 | Public method to get the list of active connection names. |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
118 | |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
119 | If this is not a multiplexing server, an empty list is returned. |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
120 | |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
121 | @return list of active connection names |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
122 | @rtype list of str |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
123 | """ |
265
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
124 | if self.__multiplex: |
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
125 | return list(self.__connections.keys()) |
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
126 | else: |
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
127 | return [] |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
128 | |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | @pyqtSlot() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
130 | def __receiveJson(self, idString): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | Private slot handling received data from the client. |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
133 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
134 | @param idString id of the connection been disconnected |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
135 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
137 | if idString: |
209
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
138 | try: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
139 | connection = self.__connections[idString] |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
140 | except KeyError: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
141 | connection = None |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
142 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
143 | connection = self.__connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
144 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
145 | while connection and connection.canReadLine(): |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
146 | data = connection.readLine() |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | jsonLine = bytes(data).decode("utf-8", 'backslashreplace') |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | |
347
b5048b5ff454
- updated to rope 0.18.0+
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
346
diff
changeset
|
149 | #- print("JSON Server ({0}): {1}".format(self.__name, jsonLine)) |
353
d38295fd97c2
Added code to suppress a code style warning.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
347
diff
changeset
|
150 | # __IGNORE_WARNING_M891__ |
347
b5048b5ff454
- updated to rope 0.18.0+
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
346
diff
changeset
|
151 | #- this is for debugging only |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | try: |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | clientDict = json.loads(jsonLine.strip()) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | except (TypeError, ValueError) as err: |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | E5MessageBox.critical( |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | None, |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | self.tr("JSON Protocol Error"), |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159 | self.tr("""<p>The response received from the client""" |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160 | """ could not be decoded. Please report""" |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | """ this issue with the received data to the""" |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | """ eric bugs email address.</p>""" |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | """<p>Error: {0}</p>""" |
208
df77c3a4976d
Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
203
diff
changeset
|
164 | """<p>Data:<br/>{1}</p>""").format( |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | str(err), Utilities.html_encode(jsonLine.strip())), |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166 | E5MessageBox.StandardButtons( |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | E5MessageBox.Ok)) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | return |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170 | method = clientDict["method"] |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | params = clientDict["params"] |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | self.handleCall(method, params) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
175 | def sendJson(self, command, params, flush=False, idString=""): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
177 | Public method to send a single command to a client. |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | @param command command name to be sent |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | @type str |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | @param params dictionary of named parameters for the command |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | @type dict |
168
53d76b4fc1ac
Implemented the distributed History dialog and moved the Undo/Redo functions to this dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
166
diff
changeset
|
183 | @param flush flag indicating to flush the data to the socket |
53d76b4fc1ac
Implemented the distributed History dialog and moved the Undo/Redo functions to this dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
166
diff
changeset
|
184 | @type bool |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
185 | @param idString id of the connection to send data to |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
186 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | commandDict = { |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | "jsonrpc": "2.0", |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | "method": command, |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | "params": params, |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | } |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | cmd = json.dumps(commandDict) + '\n' |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
195 | if idString: |
209
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
196 | try: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
197 | connection = self.__connections[idString] |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
198 | except KeyError: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
199 | connection = None |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
200 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
201 | connection = self.__connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
202 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
203 | if connection is not None: |
210
8b07adc3cb87
Fixed an issue receiving the data sent by the server on the client side.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
209
diff
changeset
|
204 | data = cmd.encode('utf8', 'backslashreplace') |
8b07adc3cb87
Fixed an issue receiving the data sent by the server on the client side.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
209
diff
changeset
|
205 | length = "{0:09d}".format(len(data)) |
8b07adc3cb87
Fixed an issue receiving the data sent by the server on the client side.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
209
diff
changeset
|
206 | connection.write(length.encode() + data) |
168
53d76b4fc1ac
Implemented the distributed History dialog and moved the Undo/Redo functions to this dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
166
diff
changeset
|
207 | if flush: |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
208 | connection.flush() |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | |
285
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
210 | def startClient(self, interpreter, clientScript, clientArgs, idString="", |
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
211 | environment=None): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
213 | Public method to start a client process. |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | @param interpreter interpreter to be used for the client |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | @type str |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | @param clientScript path to the client script |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | @type str |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | @param clientArgs list of arguments for the client |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
220 | @param idString id of the client to be started |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
221 | @type str |
285
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
222 | @param environment dictionary of environment settings to pass |
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
223 | @type dict |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | @return flag indicating a successful client start |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | @rtype bool |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | if interpreter == "" or not Utilities.isinpath(interpreter): |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | return False |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | proc = QProcess() |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231 | proc.setProcessChannelMode(QProcess.ForwardedChannels) |
285
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
232 | if environment is not None: |
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
233 | env = QProcessEnvironment() |
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
234 | for key, value in list(environment.items()): |
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
235 | env.insert(key, value) |
247d62c682dc
CodeAssistServer, RefactoringServer, JsonServer: adapted the code to the virtual environment extensions as of eric6 18.12.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
265
diff
changeset
|
236 | proc.setProcessEnvironment(env) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237 | args = [clientScript, self.__hostAddress, str(self.serverPort())] |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
238 | if idString: |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
239 | args.append(idString) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240 | args.extend(clientArgs) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241 | proc.start(interpreter, args) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242 | if not proc.waitForStarted(10000): |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243 | proc = None |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
245 | if idString: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
246 | self.__clientProcesses[idString] = proc |
358
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
247 | if proc: |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
248 | timer = QTimer() |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
249 | timer.setSingleShot(True) |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
250 | timer.start(30000) # 30s timeout |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
251 | while (idString not in self.connectionNames() |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
252 | and timer.isActive() |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
253 | ): |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
254 | # Give the event loop the chance to process the new |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
255 | # connection of the client (= slow start). |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
256 | QCoreApplication.processEvents( |
84c2fd80c949
JsonServer: modified 'startClient()' such, that events are processed for max. 30 seconds to allow the client to connect before trying to send any command.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
354
diff
changeset
|
257 | QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
258 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
259 | self.__clientProcess = proc |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261 | return proc is not None |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
263 | def stopClient(self, idString=""): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
265 | Public method to stop a client process. |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
266 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
267 | @param idString id of the client to be stopped |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
268 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
270 | self.sendJson("Exit", {}, flush=True, idString=idString) |
166
6fc202183b3b
Implemented the distributed 'query' methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
163
diff
changeset
|
271 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
272 | if idString: |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
273 | try: |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
274 | connection = self.__connections[idString] |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
275 | except KeyError: |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
276 | connection = None |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
277 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
278 | connection = self.__connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
279 | if connection is not None: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
280 | connection.waitForDisconnected() |
166
6fc202183b3b
Implemented the distributed 'query' methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
163
diff
changeset
|
281 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
282 | if idString: |
354
a967ff16629a
- implemented some code simplifications
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
353
diff
changeset
|
283 | with contextlib.suppress(KeyError): |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
284 | self .__clientProcesses[idString].close() |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
285 | del self.__clientProcesses[idString] |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
286 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
287 | if self.__clientProcess is not None: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
288 | self.__clientProcess.close() |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
289 | self.__clientProcess = None |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
290 | |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
291 | def stopAllClients(self): |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
292 | """ |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
293 | Public method to stop all clients. |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
294 | """ |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
295 | clientNames = self.connectionNames()[:] |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
296 | for clientName in clientNames: |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
297 | self.stopClient(clientName) |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
298 | |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
299 | ####################################################################### |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
300 | ## The following methods should be overridden by derived classes |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
301 | ####################################################################### |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
302 | |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
303 | def handleCall(self, method, params): |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
304 | """ |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
305 | Public method to handle a method call from the client. |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
306 | |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
307 | Note: This is an empty implementation that must be overridden in |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
308 | derived classes. |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
309 | |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
310 | @param method requested method name |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
311 | @type str |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
312 | @param params dictionary with method specific parameters |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
313 | @type dict |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
314 | """ |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
315 | pass |