Fri, 02 Feb 2024 11:29:08 +0100
eric-ide Server
- Implemented a file dialog for remote files and started to integrate it where relevant.
10531
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing the eric remote server. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import io |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import json |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import select |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | import socket |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | import struct |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | import sys |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | import traceback |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | import zlib |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | from eric7.UI.Info import Version |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | from .EricRequestCategory import EricRequestCategory |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | class EricServer: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | Class implementing the eric remote server. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | def __init__(self, port=42024, useIPv6=False): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | Constructor |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | @param port port to listen on (defaults to 42024) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | @type int (optional) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | @param useIPv6 flag indicating to use IPv6 protocol (defaults to False) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | @type bool (optional) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | """ |
10539
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
38 | self.__requestCategoryHandlerRegistry = {} |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
39 | # Dictionary containing the defined and registered request category |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
40 | # handlers. The key is the request category and the value is the respective |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
41 | # handler method. This method must have the signature: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
42 | # handler(request:str, params:dict, reqestUuid:str) -> None |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
43 | self.__registerInternalHandlers() |
10531
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | self.__connection = None |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | address = ("", port) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | if socket.has_dualstack_ipv6() and useIPv6: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | self.__socket = socket.create_server( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | address, family=socket.AF_INET6, dualstack_ipv6=True |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | else: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | self.__socket = socket.create_server( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | address, family=socket.AF_INET |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | ####################################################################### |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | ## Methods for receiving requests and sending the results. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | ####################################################################### |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | def sendJson(self, category, reply, params, reqestUuid=""): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | Public method to send a single refactoring command to the server. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | @param category service category |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | @type EricRequestCategory |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | @param reply reply name to be sent |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | @param params dictionary of named parameters for the request |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | @type dict |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | @param reqestUuid UUID of the associated request as sent by the eric IDE |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | (defaults to "", i.e. no UUID received) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | commandDict = { |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | "jsonrpc": "2.0", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | "category": category, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | "reply": reply, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | "params": params, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | "uuid": reqestUuid, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | } |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | data = json.dumps(commandDict).encode("utf8", "backslashreplace") |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | header = struct.pack(b"!II", len(data), zlib.adler32(data) & 0xFFFFFFFF) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | self.__connection.sendall(header) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | self.__connection.sendall(data) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | def __receiveBytes(self, length): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | Private method to receive the given length of bytes. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | @param length bytes to receive |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | @type int |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | @return received bytes or None if connection closed |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | @rtype bytes |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | data = bytearray() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | while len(data) < length: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | newData = self.__connection.recv(length - len(data)) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | if not newData: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | return None |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | data += newData |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | return data |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | def __receiveJson(self): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | Private method to receive a JSON encoded command and data from the |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | server. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | @return tuple containing the received service category, the command, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | a dictionary containing the associated data and the UUID of the |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | request |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | @rtype tuple of (int, str, dict, str) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | # step 1: receive the data |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | header = self.__receiveBytes(struct.calcsize(b"!II")) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | if not header: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | return EricRequestCategory.Error, None, None, None |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | length, datahash = struct.unpack(b"!II", header) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | length = int(length) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | data = self.__receiveBytes(length) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | if not data or zlib.adler32(data) & 0xFFFFFFFF != datahash: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | self.sendJson( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | category=EricRequestCategory.Error, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | reply="ClientChecksumException", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | params={ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | "ExceptionType": "ProtocolChecksumError", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | "ExceptionValue": "The checksum of the data does not match.", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | "ProtocolData": data.decode("utf8", "backslashreplace"), |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | }, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | return EricRequestCategory.Error, None, None, None |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | # step 2: decode and convert the data |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | jsonString = data.decode("utf8", "backslashreplace") |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | try: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | requestDict = json.loads(jsonString.strip()) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | except (TypeError, ValueError) as err: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | self.sendJson( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | category=EricRequestCategory.Error, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | reply="ClientException", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | params={ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | "ExceptionType": "ProtocolError", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | "ExceptionValue": str(err), |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | "ProtocolData": jsonString.strip(), |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | }, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150 | return EricRequestCategory.Error, None, None, None |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | category = requestDict["category"] |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | request = requestDict["request"] |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | params = requestDict["params"] |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | reqestUuid = requestDict["uuid"] |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | return category, request, params, reqestUuid |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159 | ####################################################################### |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160 | ## Methods for the server main loop. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | ####################################################################### |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | def __shutdown(self): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | Private method to shut down the server. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | self.__socket.shutdown(socket.SHUT_RDWR) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | self.__socket.close() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170 | def run(self): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | Public method implementing the remote server main loop. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | Exiting the inner loop, that receives and dispatches the requests, will |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | cause the server to stop and exit. The main loop handles these requests. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | <ul> |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | <li>exit - exit the handler loop and wait for the next connection</li> |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | <li>shutdown - exit the handler loop and perform a clean shutdown</li> |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | </ul> |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | @return flag indicating a clean shutdown |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | @rtype bool |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | shutdown = False |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | cleanExit = True |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | # listen on the server socket for new connections |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | self.__socket.listen(1) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | while True: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | try: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | # accept the next pending connection |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | print("Waiting for connection...") |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | self.__connection, address = self.__socket.accept() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | print(f"Connection from {address[0]}, port {address[1]}") |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | selectErrors = 0 |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | while selectErrors <= 10: # selected arbitrarily |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | try: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | rrdy, wrdy, xrdy = select.select([self.__connection], [], []) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | # Just waiting for self.__connection. Therefore no check |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | # needed. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | category, request, params, reqestUuid = self.__receiveJson() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | if category == EricRequestCategory.Error or request is None: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | selectErrors += 1 |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | elif category == EricRequestCategory.Server: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | if request.lower() == "exit": |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | break |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | elif request.lower() == "shutdown": |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | shutdown = True |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | break |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | else: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | self.__handleRequest( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | category, request, params, reqestUuid |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | else: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | self.__handleRequest(category, request, params, reqestUuid) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220 | # reset select errors |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221 | selectErrors = 0 |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | except (select.error, socket.error): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | selectErrors += 1 |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | except KeyboardInterrupt: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | # intercept user pressing Ctrl+C |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | shutdown = True |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | except Exception: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231 | exctype, excval, exctb = sys.exc_info() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232 | tbinfofile = io.StringIO() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | traceback.print_tb(exctb, None, tbinfofile) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | tbinfofile.seek(0) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235 | tbinfo = tbinfofile.read() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237 | print(f"{str(exctype)} / {str(excval)} / {tbinfo}") |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
238 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239 | shutdown = True |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240 | cleanExit = False |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242 | if self.__connection is not None: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243 | self.__connection.shutdown(socket.SHUT_RDWR) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244 | self.__connection.close() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245 | self.__connection = None |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247 | if shutdown: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248 | # exit the outer loop and shut down the server |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249 | self.__shutdown() |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250 | break |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252 | return cleanExit |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254 | ####################################################################### |
10539
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
255 | ## Methods for registering and unregistering handlers. |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
256 | ####################################################################### |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
257 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
258 | def registerRequestHandler(self, requestCategory, handler): |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
259 | """ |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
260 | Public method to register a request handler method for the given request |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
261 | category. |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
262 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
263 | @param requestCategory request category to be registered |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
264 | @type EricRequestCategory or int (>= EricRequestCategory.UserCategory) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
265 | @param handler reference to the handler method. This handler must accept |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
266 | the parameters 'request', 'params', and 'requestUuid' |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
267 | @type function(request:str, params:dict, requestUuid:str) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
268 | @exception ValueError raised to signal a request category collision |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
269 | """ |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
270 | if requestCategory in self.__requestCategoryHandlerRegistry: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
271 | raise ValueError(f"Request category '{requestCategory} already registered.") |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
272 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
273 | self.__requestCategoryHandlerRegistry[requestCategory] = handler |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
274 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
275 | def unregisterRequestHandler(self, requestCategory, ignoreError=False): |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
276 | """ |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
277 | Public method to unregister a handler for the given request category. |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
278 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
279 | Note: This method will raise a KeyError exception in case the request |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
280 | category has not been registered and ignoreError is False (the default). |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
281 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
282 | @param requestCategory request category to be unregistered |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
283 | @type EricRequestCategory or int (>= EricRequestCategory.UserCategory) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
284 | @param ignoreError flag indicating to ignore errors (defaults to False) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
285 | @type bool (optional) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
286 | """ |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
287 | try: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
288 | del self.__requestCategoryHandlerRegistry[requestCategory] |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
289 | except KeyError: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
290 | if not ignoreError: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
291 | raise |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
292 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
293 | def __registerInternalHandlers(self): |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
294 | """ |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
295 | Private method to register request handler categories of this class. |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
296 | """ |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
297 | self.registerRequestHandler(EricRequestCategory.Echo, self.__handleEchoRequest) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
298 | self.registerRequestHandler( |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
299 | EricRequestCategory.Server, self.__handleServerRequest |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
300 | ) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
301 | self.registerRequestHandler(EricRequestCategory.Error, None) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
302 | # Register a None handler to indicate we are not expecting a request of the |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
303 | # 'Error' category. |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
304 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
305 | ####################################################################### |
10531
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306 | ## Request handler methods. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
307 | ####################################################################### |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309 | def __handleRequest(self, category, request, params, reqestUuid): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311 | Private method handling or dispatching the received requests. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
313 | @param category category of the request |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314 | @type EricRequestCategory |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315 | @param request request name |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317 | @param params request parameters |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318 | @type dict |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319 | @param reqestUuid UUID of the associated request as sent by the eric IDE |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320 | @type str |
10539
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
321 | @exception ValueError raised to indicate an invalid or unsupported request |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
322 | handler catehory |
10531
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
323 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
324 | try: |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
325 | handler = self.__requestCategoryHandlerRegistry[category] |
10539
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
326 | except KeyError: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
327 | if ( |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
328 | category < EricRequestCategory.UserCategory |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
329 | and category in EricRequestCategory |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
330 | ): |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
331 | # it is an internally supported category |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
332 | if category == EricRequestCategory.FileSystem: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
333 | from .EricServerFileSystemRequestHandler import ( |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
334 | EricServerFileSystemRequestHandler, |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
335 | ) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
336 | handler = EricServerFileSystemRequestHandler(self).handleRequest |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
337 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
338 | elif category == EricRequestCategory.Project: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
339 | # TODO: 'Project' handler not implemented yet |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
340 | handler = None |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
341 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
342 | elif category == EricRequestCategory.Debugger: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
343 | # TODO: 'Debugger' handler not implemented yet |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
344 | handler = None |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
345 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
346 | self.registerRequestHandler(category, handler) |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
347 | else: |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
348 | handler = None |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
349 | |
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
350 | if handler is not None: |
10531
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
351 | handler(request=request, params=params, reqestUuid=reqestUuid) |
10539
4274f189ff78
eric-ide Server
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10531
diff
changeset
|
352 | else: |
10531
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353 | self.sendJson( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354 | category=EricRequestCategory.Error, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355 | reply="UnsupportedServiceCategory", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356 | params={"Category": category}, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359 | def __handleEchoRequest(self, request, params, reqestUuid): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361 | Private method to handle an 'Echo' request. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363 | @param request request name |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365 | @param params request parameters |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366 | @type dict |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367 | @param reqestUuid UUID of the associated request as sent by the eric IDE |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368 | (defaults to "", i.e. no UUID received) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371 | self.sendJson( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372 | category=EricRequestCategory.Echo, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373 | reply="Echo", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374 | params=params, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375 | reqestUuid=reqestUuid, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376 | ) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378 | def __handleServerRequest(self, request, params, reqestUuid): |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380 | Private method to handle a 'Server' request. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
382 | @param request request name |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
383 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
384 | @param params request parameters |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
385 | @type dict |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
386 | @param reqestUuid UUID of the associated request as sent by the eric IDE |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387 | (defaults to "", i.e. no UUID received) |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388 | @type str |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
389 | """ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
390 | # 'Exit' and 'Shutdown' are handled in the 'run()' method. |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
391 | |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
392 | if request.lower() == "versions": |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393 | self.sendJson( |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394 | category=EricRequestCategory.Server, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395 | reply="Versions", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396 | params={ |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397 | "python": sys.version.split()[0], |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398 | "py_bitsize": "64-Bit" if sys.maxsize > 2**32 else "32-Bit", |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399 | "version": Version, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400 | }, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
401 | reqestUuid=reqestUuid, |
3308e8349e4c
Started implementing an eric-ide server for remote development (e.g. on a different host or in a Docker container).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
402 | ) |