src/eric7/RemoteServer/EricServerDebuggerRequestHandler.py

Mon, 10 Jun 2024 15:42:05 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 10 Jun 2024 15:42:05 +0200
branch
server
changeset 10767
b3672d3e7644
parent 10764
5915ca2466b2
child 10953
42166c630d9b
permissions
-rw-r--r--

Introduced a remote server request handler base class to get rid of redundant code.

10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the debugger request handler of the eric-ide server.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import json
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import os
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import selectors
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 import subprocess
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import sys
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import types
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from .EricRequestCategory import EricRequestCategory
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
19 from .EricServerBaseRequestHandler import EricServerBaseRequestHandler
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
21
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
22 class EricServerDebuggerRequestHandler(EricServerBaseRequestHandler):
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Class implementing the debugger request handler of the eric-ide server.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 def __init__(self, server):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 Constructor
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @param server reference to the eric-ide server object
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @type EricServer
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
34 super().__init__(server)
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
35
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
36 self._category = EricRequestCategory.Debugger
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
37
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
38 self._requestMethodMapping = {
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 "StartClient": self.__startClient,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 "StopClient": self.__stopClient,
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
41 "DebugClientCommand": self.__relayDebugClientCommand,
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__client = None
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
46 self.__inStartClient = False
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.__pendingConnections = []
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.__connections = {}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 address = ("127.0.0.1", 0)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__socket = socket.create_server(address, family=socket.AF_INET)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
53 self.__originalPathString = os.getenv("PATH")
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
54
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 def initServerSocket(self):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 Public method to initialize the server socket listening for debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 connections.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 # listen on the debug server socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.__socket.listen()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.__socket.setblocking(False)
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
63 address = self.__socket.getsockname()
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
64 print( # noqa: M801
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
65 f"Listening for 'Debug Client' connections on"
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
66 f" {address[0]}, port {address[1]}"
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 data = types.SimpleNamespace(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 name="server", acceptHandler=self.__acceptDbgClientConnection
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 )
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
71 self._server.getSelector().register(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.__socket, selectors.EVENT_READ, data=data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 ## DebugServer like methods.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 def __acceptDbgClientConnection(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 Private method to accept the connection on the listening debug server socket.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @param sock reference to the listening socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 connection, address = sock.accept() # Should be ready to read
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
87 print(f"'Debug Client' connection from {address[0]}, port {address[1]}")
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
88 # noqa: M801
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 connection.setblocking(False)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.__pendingConnections.append(connection)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 data = types.SimpleNamespace(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 name="debug_client",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 address=address,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 handler=self.__serviceDbgClientConnection,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 )
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
97 self._server.getSelector().register(connection, selectors.EVENT_READ, data=data)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 def __serviceDbgClientConnection(self, key):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 Private method to service the debug client connection.
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
102
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 @param key reference to the SelectorKey object associated with the connection
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 to be serviced
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @type selectors.SelectorKey
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 sock = key.fileobj
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
108 data = self._server.receiveJsonCommand(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 if data is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 # socket was closed by debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.__clientSocketDisconnected(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 elif data:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 method = data["method"]
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
115
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
116 # 1. process debug client messages before relaying
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 if method == "DebuggerId" and sock in self.__pendingConnections:
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
118 debuggerId = data["params"]["debuggerId"]
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self.__connections[debuggerId] = sock
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__pendingConnections.remove(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 if self.__mainClientId is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.__mainClientId = debuggerId
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 elif method == "ResponseBanner":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 # add an indicator for the eric-ide server
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 data["params"]["platform"] += " (eric-ide Server)"
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
128 # 2. pass on the data to the eric-ide
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 jsonStr = json.dumps(data)
10610
bb0149571d94 Finished adapting the project functions to support an 'eric-ide' server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10597
diff changeset
130 # - print("Client Response:", jsonStr)
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
131 self._server.sendJson(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 reply="DebugClientResponse",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 params={"response": jsonStr},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 )
10597
fbe93720ee9f Corrected a few formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10574
diff changeset
136
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
137 # 3. process debug client messages after relaying
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
138 if method == "ResponseExit":
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
139 for sock in list(self.__connections.values()):
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
140 if not self._server.isSocketClosed(sock):
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
141 self.__clientSocketDisconnected(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 def __clientSocketDisconnected(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
145 Private method handling a socket disconnecting.
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 @param sock reference to the disconnected socket
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
148 @type socket.socket
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 """
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
150 self._server.getSelector().unregister(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
152 address = sock.getpeername()
10633
dda7e43934dc Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10630
diff changeset
153 print( # noqa: M801
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
154 f"'Debug Client' connection from {address[0]}, port {address[1]} closed."
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
155 )
10633
dda7e43934dc Corrected some code formatting and coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10630
diff changeset
156
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 for debuggerId in list(self.__connections):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 if self.__connections[debuggerId] is sock:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 del self.__connections[debuggerId]
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
160 self._server.sendJson(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 if debuggerId == self.__mainClientId:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 break
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 else:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 if sock in self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 self.__pendingConnections.remove(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 sock.close()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
176 def __mainClientExited(self):
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
177 """
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
178 Private method to handle exiting of the main debug client.
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
179 """
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
180 self._server.sendJson(
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
181 category=EricRequestCategory.Debugger,
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
182 reply="MainClientExited",
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
183 params={"debugger_id": self.__mainClientId if self.__mainClientId else ""},
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
184 )
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
185
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 def shutdownClients(self):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 Public method to shut down all connected clients.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 if not self.__client:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 # no client started yet
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 return
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 while self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 sock = self.__pendingConnections.pop()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 commandDict = self.__prepareClientCommand("RequestShutdown", {})
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
197 self._server.sendJsonCommand(commandDict, sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.__shutdownSocket("", sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 while self.__connections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 debuggerId, sock = self.__connections.popitem()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 commandDict = self.__prepareClientCommand("RequestShutdown", {})
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
203 self._server.sendJsonCommand(commandDict, sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 self.__shutdownSocket(debuggerId, sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 # reinitialize
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 self.__client = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 def __shutdownSocket(self, debuggerId, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
212 Private method to shut down a socket.
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 @param debuggerId ID of the debugger the socket belongs to
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 @param sock reference to the socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 """
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
219 self._server.getSelector().unregister(sock)
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 sock.shutdown(socket.SHUT_RDWR)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 sock.close()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 if debuggerId:
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
224 self._server.sendJson(
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 def __prepareClientCommand(self, command, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 Private method to prepare a command dictionary for the debug client.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 @param command command to be sent
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 @param params dictionary containing the command parameters
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 @return completed command dictionary to be sent to the debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @rtype dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 return {
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 "jsonrpc": "2.0",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 "method": command,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 "params": params,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 ## Individual request handler methods.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 def __startClient(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 Private method to start a debug client process.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 """
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
258 self.__inStartClient = True
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
259
10567
b098e0d028cc Added some code to handle error conditions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10563
diff changeset
260 # start a debug client
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 debugClient = os.path.abspath(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 os.path.join(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 os.path.dirname(__file__),
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 "..",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 "DebugClients",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 "Python",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 "DebugClient.py",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 ipaddr, port = self.__socket.getsockname()
10764
5915ca2466b2 Added code to support eric-ide server environments for debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
271 args = [
5915ca2466b2 Added code to support eric-ide server environments for debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
272 params["interpreter"] if params["interpreter"] else sys.executable,
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
273 debugClient,
10764
5915ca2466b2 Added code to support eric-ide server environments for debugging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10633
diff changeset
274 ]
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 args.extend(params["arguments"])
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 args.extend([str(port), "True", ipaddr])
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
278 workingDir = params["working_dir"] if params["working_dir"] else None
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
279
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
280 clientEnv = os.environ.copy()
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
281 if self.__originalPathString:
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
282 clientEnv["PATH"] = self.__originalPathString
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
283
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 self.__client = subprocess.Popen(
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
285 args,
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
286 stdout=subprocess.PIPE,
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
287 stderr=subprocess.PIPE,
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
288 cwd=workingDir,
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
289 env=clientEnv,
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 )
10563
b4b47c1a02ba Made the eric-ide server a single connection server.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10561
diff changeset
291
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
292 def __stopClient(self, params): # noqa: U100
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 Private method to stop the current debug client process.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @return dictionary containing the reply data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 @rtype dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 self.shutdownClients()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 return {"ok": True}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 def __relayDebugClientCommand(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 Private method to relay a debug client command to the client.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 debuggerId = params["debugger_id"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 jsonStr = params["command"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
315 if not debuggerId and self.__mainClientId and "RequestBanner" in jsonStr:
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
316 # modify the target for the 'RequestBanner' request
10555
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 debuggerId = self.__mainClientId
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
319 if debuggerId == "<<all>>":
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
320 # broadcast to all connected debug clients
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
321 for sock in self.__connections.values():
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
322 self._server.sendJsonCommand(jsonStr, sock)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
323 else:
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
324 try: # noqa: Y105
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
325 sock = self.__connections[debuggerId]
10767
b3672d3e7644 Introduced a remote server request handler base class to get rid of redundant code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10764
diff changeset
326 self._server.sendJsonCommand(jsonStr, sock)
10561
be23a662d709 Implemented (most) of the eric-ide server debugging functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10555
diff changeset
327 except KeyError:
10630
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
328 pass
552a790fd9bc Corrected some issues and improved some existing code with respect to eric-ide server use.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10610
diff changeset
329 # - print(f"Command for unknown debugger ID '{debuggerId}' received.")

eric ide

mercurial