src/eric7/RemoteServer/EricServerDebuggerRequestHandler.py

Fri, 09 Feb 2024 19:54:15 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 09 Feb 2024 19:54:15 +0100
branch
server
changeset 10555
08e853c0c77b
child 10561
be23a662d709
permissions
-rw-r--r--

Implemented an eric-ide Server Shell.

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
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 class EricServerDebuggerRequestHandler:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 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
23 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, server):
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 Constructor
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 @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
30 @type EricServer
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.__server = server
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 self.__requestMethodMapping = {
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 "StartClient": self.__startClient,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 "StopClient": self.__stopClient,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 "DebugClientCommand": self.__relayDebugClientCommand
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__client = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__pendingConnections = []
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__connections = {}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 address = ("127.0.0.1", 0)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 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
47
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 def initServerSocket(self):
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 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
51 connections.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 # listen on the debug server socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__socket.listen()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__socket.setblocking(False)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 print(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 f"Listening for 'debug client' connections on"
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 f" {self.__socket.getsockname()}"
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 data = types.SimpleNamespace(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 name="server", acceptHandler=self.__acceptDbgClientConnection
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__server.getSelector().register(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.__socket, selectors.EVENT_READ, data=data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 def handleRequest(self, request, params, reqestUuid):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 Public method handling the received debugger requests.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 @param request request name
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @param params dictionary containing the request parameters
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 @param reqestUuid UUID of the associated request as sent by the eric IDE
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 @type str
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 try:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 result = self.__requestMethodMapping[request](params)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 if result:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 reply=request,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 params=result,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 reqestUuid=reqestUuid,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 except KeyError:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 reply="DebuggerRequestError",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 params={"Error": f"Request type '{request}' is not supported."},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 ## DebugServer like methods.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 #######################################################################
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 __acceptDbgClientConnection(self, sock):
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 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
102
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 @param sock reference to the listening socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 @type socket.socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 connection, address = sock.accept() # Should be ready to read
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 print(f"'Debug client' connection from {address[0]}, port {address[1]}")
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 connection.setblocking(False)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.__pendingConnections.append(connection)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 data = types.SimpleNamespace(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 name="debug_client",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 address=address,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 handler=self.__serviceDbgClientConnection,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 events = selectors.EVENT_READ
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.__server.getSelector().register(connection, events, data=data)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 def __serviceDbgClientConnection(self, key):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 Private method to service the debug client connection.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 @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
124 to be serviced
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @type selectors.SelectorKey
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 sock = key.fileobj
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 data = self.__server.receiveJsonCommand(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 if data is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 # socket was closed by debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.__clientSocketDisconnected(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 elif data:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 method = data["method"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 if method == "DebuggerId" and sock in self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 debuggerId = data['params']['debuggerId']
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.__connections[debuggerId] = sock
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 self.__pendingConnections.remove(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if self.__mainClientId is None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 self.__mainClientId = debuggerId
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 elif method == "ResponseBanner":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 # add an indicator for the eric-ide server
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 data["params"]["platform"] += " (eric-ide Server)"
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 # pass on the data to the eric-ide
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 jsonStr = json.dumps(data)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 print("Client Response:", jsonStr)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 reply="DebugClientResponse",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 params={"response": jsonStr},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 def __clientSocketDisconnected(self, sock):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 Private slot handling a socket disconnecting.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 @param sock reference to the disconnected socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 @type QTcpSocket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.__server.getSelector().unregister(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 for debuggerId in list(self.__connections):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 if self.__connections[debuggerId] is sock:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 del self.__connections[debuggerId]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 if debuggerId == self.__mainClientId:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 break
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 else:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 if sock in self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 self.__pendingConnections.remove(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 sock.shutdown(socket.SHUT_RDWR)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 sock.close()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 if not self.__connections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 # no active connections anymore
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 reply="LastDebugClientExited",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 params={},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 def __serviceDbgClientStdoutStderr(self, key):
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 Private method to service the debug client stdout and stderr channels.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 @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
197 to be serviced
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 @type selectors.SelectorKey
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 data = key.fileobj.read()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 if key.data.name == "debug_client_stdout":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 # TODO: stdout handling not implemented yet
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 print("stdout:", data)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 elif key.data.name == "debug_client_stderr":
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 # TODO: stderr handling not implemented yet
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 print("stderr:", data)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 def shutdownClients(self):
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 Public method to shut down all connected clients.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 if not self.__client:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 # no client started yet
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 return
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 while self.__pendingConnections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 sock = self.__pendingConnections.pop()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 commandDict = self.__prepareClientCommand("RequestShutdown", {})
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 self.__server.sendJsonCommand(commandDict, sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 self.__shutdownSocket("", sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 while self.__connections:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 debuggerId, sock = self.__connections.popitem()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 commandDict = self.__prepareClientCommand("RequestShutdown", {})
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 self.__server.sendJsonCommand(commandDict, sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 self.__shutdownSocket(debuggerId, sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 # reinitialize
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 self.__mainClientId = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 self.__client = None
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 # no active connections anymore
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 reply="LastDebugClientExited",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 params={},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 def __shutdownSocket(self, debuggerId, sock):
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 Private slot to shut down a socket.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 @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
244 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @param sock reference to the socket
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 @type socket.socket
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 self.__server.getSelector().unregister(sock)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 sock.shutdown(socket.SHUT_RDWR)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 sock.close()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 if debuggerId:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 def __prepareClientCommand(self, command, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 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
262
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 @param command command to be sent
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 @type str
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 @param params dictionary containing the command parameters
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 @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
268 @rtype dict
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 return {
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 "jsonrpc": "2.0",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 "method": command,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 "params": params,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 }
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 ## Individual request handler methods.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 #######################################################################
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 def __startClient(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 Private method to start a debug client process.
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 # 1. stop an already started debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 if self.__client is not None:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 self.__client.terminate()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.__client = None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 # 2. start a debug client
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 debugClient = os.path.abspath(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 os.path.join(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 os.path.dirname(__file__),
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 "..",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 "DebugClients",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 "Python",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 "DebugClient.py",
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 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 ipaddr, port = self.__socket.getsockname()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 args = [sys.executable, debugClient]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 args.extend(params["arguments"])
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 args.extend([str(port), "True", ipaddr])
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 self.__client = subprocess.Popen(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 args, stdout=subprocess.PIPE, stderr=subprocess.PIPE
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 # TODO: register stdin & stderr with selector
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 def __stopClient(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 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
315
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @return dictionary containing the reply data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 @rtype dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 self.shutdownClients()
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 return {"ok": True}
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 def __relayDebugClientCommand(self, params):
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 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
328
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 @param params dictionary containing the request data
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 @type dict
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 """
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 debuggerId = params["debugger_id"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 jsonStr = params["command"]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 print(debuggerId, "->", jsonStr)
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 if not debuggerId and self.__mainClientId:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 debuggerId = self.__mainClientId
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 try:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 sock = self.__connections[debuggerId]
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 except KeyError:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 print(f"Command for unknown debugger ID '{debuggerId}' received.")
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 # tell the eric-ide again, that this debugger ID is gone
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 self.__server.sendJson(
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 category=EricRequestCategory.Debugger,
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 reply="DebugClientDisconnected",
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 params={"debugger_id": debuggerId},
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 sock = (
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 self.__connections[self.__mainClientId] if self.__mainClientId else None
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 )
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 if sock:
08e853c0c77b Implemented an eric-ide Server Shell.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 self.__server.sendJsonCommand(jsonStr, sock)

eric ide

mercurial