Wed, 01 Jan 2020 11:59:01 +0100
Updated copyright for 2020.
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 | |
326
67bcde9c65b9
Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
320
diff
changeset
|
3 | # Copyright (c) 2017 - 2020 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 | from __future__ import unicode_literals |
303 | 11 | try: |
12 | str = unicode # __IGNORE_WARNING__ __IGNORE_EXCEPTION__ | |
13 | except NameError: | |
14 | pass | |
15 | ||
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | import json |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
320
91b171fdd85f
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
303
diff
changeset
|
19 | from PyQt5.QtCore import ( |
91b171fdd85f
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
303
diff
changeset
|
20 | pyqtSlot, QProcess, QProcessEnvironment, QCoreApplication |
91b171fdd85f
Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
303
diff
changeset
|
21 | ) |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | 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
|
23 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | 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
|
25 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | import Preferences |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | import Utilities |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | class JsonServer(QTcpServer): |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | 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
|
33 | """ |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
34 | 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
|
35 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | Constructor |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
38 | @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
|
39 | @type str |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
40 | @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
|
41 | @type bool |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | @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
|
43 | @type QObject |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | super(JsonServer, self).__init__(parent) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
47 | self.__name = name |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
48 | self.__multiplex = multiplex |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
49 | if self.__multiplex: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
50 | self.__clientProcesses = {} |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
51 | self.__connections = {} |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
52 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
53 | self.__clientProcess = None |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
54 | 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
|
55 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | # 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
|
57 | 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
|
58 | 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
|
59 | # IPv4 |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | 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
|
61 | else: |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | # IPv6 |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | self.__hostAddress = '::1' |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | 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
|
65 | |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
66 | 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
|
67 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | port = self.serverPort() |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
69 | ## 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
|
70 | 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
|
71 | .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
|
72 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | @pyqtSlot() |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
74 | 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
|
75 | """ |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
76 | 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
|
77 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | connection = self.nextPendingConnection() |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | 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
|
80 | return |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
82 | 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
|
83 | 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
|
84 | return |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
85 | idString = bytes(connection.readLine()).decode( |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
86 | "utf-8", 'backslashreplace').strip() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
87 | if idString in self.__connections: |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
88 | self.__connections[idString].close() |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
89 | self.__connections[idString] = connection |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
90 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
91 | idString = "" |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
92 | 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
|
93 | self.__connection.close() |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
94 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
95 | self.__connection = connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
96 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
97 | connection.readyRead.connect( |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
98 | lambda: self.__receiveJson(idString)) |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
99 | connection.disconnected.connect( |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
100 | 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
|
101 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | @pyqtSlot() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
103 | 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
|
104 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
105 | 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
|
106 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
107 | @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
|
108 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
110 | if idString: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
111 | if idString in self.__connections: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
112 | self.__connections[idString].close() |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
113 | del self.__connections[idString] |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
114 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
115 | 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
|
116 | self.__connection.close() |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
117 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
118 | 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
|
119 | |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
120 | def connectionNames(self): |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
121 | """ |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
122 | 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
|
123 | |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
124 | 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
|
125 | |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
126 | @return list of active connection names |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
127 | @rtype list of str |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
128 | """ |
265
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
129 | if self.__multiplex: |
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
130 | return list(self.__connections.keys()) |
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
131 | else: |
68152c23837a
Fixed a bug in the JsonServer class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
251
diff
changeset
|
132 | return [] |
195
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
133 | |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | @pyqtSlot() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
135 | 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
|
136 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | 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
|
138 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
139 | @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
|
140 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
142 | if idString: |
209
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
143 | try: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
144 | connection = self.__connections[idString] |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
145 | except KeyError: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
146 | connection = None |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
147 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
148 | connection = self.__connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
149 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
150 | while connection and connection.canReadLine(): |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
151 | 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
|
152 | 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
|
153 | |
251
4dcc73076100
Removed the Python3 only rope variant and introduced an extended error dialog showing a traceback for errors within the rope library.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
245
diff
changeset
|
154 | ## print("JSON Server ({0}): {1}".format(self.__name, jsonLine)) |
4dcc73076100
Removed the Python3 only rope variant and introduced an extended error dialog showing a traceback for errors within the rope library.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
245
diff
changeset
|
155 | ## 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
|
156 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | try: |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | 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
|
159 | 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
|
160 | E5MessageBox.critical( |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | None, |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | 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
|
163 | 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
|
164 | """ 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
|
165 | """ 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
|
166 | """ 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
|
167 | """<p>Error: {0}</p>""" |
208
df77c3a4976d
Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
203
diff
changeset
|
168 | """<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
|
169 | 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
|
170 | E5MessageBox.StandardButtons( |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | E5MessageBox.Ok)) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | return |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | method = clientDict["method"] |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | params = clientDict["params"] |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | 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
|
178 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
179 | 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
|
180 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
181 | 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
|
182 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | @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
|
184 | @type str |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | @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
|
186 | @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
|
187 | @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
|
188 | @type bool |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
189 | @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
|
190 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | commandDict = { |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | "jsonrpc": "2.0", |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | "method": command, |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | "params": params, |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | } |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | 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
|
198 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
199 | if idString: |
209
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
200 | try: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
201 | connection = self.__connections[idString] |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
202 | except KeyError: |
c1dce8630555
Improved handling of died connections/processes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
208
diff
changeset
|
203 | connection = None |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
204 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
205 | connection = self.__connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
206 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
207 | 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
|
208 | 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
|
209 | 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
|
210 | 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
|
211 | if flush: |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
212 | connection.flush() |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | |
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
|
214 | 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
|
215 | environment=None): |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
217 | 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
|
218 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | @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
|
220 | @type str |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221 | @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
|
222 | @type str |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | @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
|
224 | @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
|
225 | @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
|
226 | @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
|
227 | @type dict |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | @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
|
229 | @rtype bool |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | """ |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231 | 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
|
232 | return False |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | proc = QProcess() |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235 | 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
|
236 | 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
|
237 | 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
|
238 | 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
|
239 | 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
|
240 | 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
|
241 | 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
|
242 | if idString: |
5d614a567be3
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
194
diff
changeset
|
243 | 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
|
244 | args.extend(clientArgs) |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245 | 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
|
246 | 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
|
247 | proc = None |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
249 | if idString: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
250 | self.__clientProcesses[idString] = proc |
293
dd1c7ed6d880
Code Assist: started to move the Mouse Click handler to Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
285
diff
changeset
|
251 | # wait until the client has connected (= slow start) |
294
78e4a6823a98
Code Assist: continued moving the Mouse Click handler to Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
293
diff
changeset
|
252 | while idString not in self.__connections: |
293
dd1c7ed6d880
Code Assist: started to move the Mouse Click handler to Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
285
diff
changeset
|
253 | QCoreApplication.processEvents() |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
254 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
255 | 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
|
256 | |
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | 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
|
258 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
259 | 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
|
260 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
261 | 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
|
262 | |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
263 | @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
|
264 | @type str |
163
6a9e7b37a18b
Refactored some JSON handling code into server and client base classes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | """ |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
266 | self.sendJson("Exit", {}, flush=True, idString=idString) |
166
6fc202183b3b
Implemented the distributed 'query' methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
163
diff
changeset
|
267 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
268 | if idString: |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
269 | try: |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
270 | connection = self.__connections[idString] |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
271 | except KeyError: |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
272 | connection = None |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
273 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
274 | connection = self.__connection |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
275 | if connection is not None: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
276 | connection.waitForDisconnected() |
166
6fc202183b3b
Implemented the distributed 'query' methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
163
diff
changeset
|
277 | |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
278 | if idString: |
203
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
279 | try: |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
280 | self .__clientProcesses[idString].close() |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
281 | del self.__clientProcesses[idString] |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
282 | except KeyError: |
c38750e1bafd
Performed some code cleanup actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
197
diff
changeset
|
283 | pass |
192
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
284 | else: |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
285 | 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
|
286 | self.__clientProcess.close() |
20950ed6b384
Extended the JsonServer to handle multiple clients simultaneously.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
189
diff
changeset
|
287 | self.__clientProcess = None |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
288 | |
197
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
289 | def stopAllClients(self): |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
290 | """ |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
291 | Public method to stop all clients. |
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 | clientNames = self.connectionNames()[:] |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
294 | for clientName in clientNames: |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
295 | self.stopClient(clientName) |
7046ac1bcb4b
Continued implementing the distributed Code Assist.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
195
diff
changeset
|
296 | |
194
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
297 | ####################################################################### |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
298 | ## 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
|
299 | ####################################################################### |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
300 | |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
301 | def handleCall(self, method, params): |
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 | 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
|
304 | |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
305 | 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
|
306 | derived classes. |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
307 | |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
308 | @param method requested method name |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
309 | @type str |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
310 | @param params dictionary with method specific parameters |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
311 | @type dict |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
312 | """ |
5c297b473425
Some more refactorings of the code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
192
diff
changeset
|
313 | pass |