Mercurial > libervia-backend
comparison sat/bridge/pb.py @ 3489:d71a163c0861
bridge (pb): connection can be set to used either UNIX socket or TCP socket:
all settings are to be put in `[DEFAULT]` section
- `bridge_pb_connection_type` can be set to `unix_socket` or `socket`
- for `socket`, `bridge_pb_host` and `bridge_pb_port` can be specified
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 21 Mar 2021 22:00:55 +0100 |
parents | be6d91572633 |
children | 3c7a64d6f49f |
comparison
equal
deleted
inserted
replaced
3488:c80a0f864b5d | 3489:d71a163c0861 |
---|---|
17 # You should have received a copy of the GNU Affero General Public License | 17 # You should have received a copy of the GNU Affero General Public License |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | 19 |
20 | 20 |
21 import dataclasses | 21 import dataclasses |
22 from sat.core.log import getLogger | 22 from pathlib import Path |
23 from twisted.spread import jelly, pb | 23 from twisted.spread import jelly, pb |
24 from twisted.internet import reactor | 24 from twisted.internet import reactor |
25 from sat.core.log import getLogger | |
26 from sat.tools import config | |
25 | 27 |
26 log = getLogger(__name__) | 28 log = getLogger(__name__) |
27 | 29 |
28 | 30 |
29 ## jelly hack | 31 ## jelly hack |
101 | 103 |
102 class Bridge(object): | 104 class Bridge(object): |
103 def __init__(self): | 105 def __init__(self): |
104 log.info("Init Perspective Broker...") | 106 log.info("Init Perspective Broker...") |
105 self.root = PBRoot() | 107 self.root = PBRoot() |
106 reactor.listenTCP(8789, pb.PBServerFactory(self.root)) | 108 conf = config.parseMainConf() |
109 conn_type = config.getConfig( | |
110 conf, | |
111 "", | |
112 "bridge_pb_connection_type", | |
113 "unix_socket" | |
114 ) | |
115 if conn_type == "unix_socket": | |
116 local_dir = Path(config.getConfig(conf, "", "local_dir")).resolve() | |
117 socket_path = local_dir / "bridge_pb" | |
118 log.info(f"using UNIX Socket at {socket_path}") | |
119 reactor.listenUNIX( | |
120 str(socket_path), pb.PBServerFactory(self.root), mode=0o600 | |
121 ) | |
122 elif conn_type == "socket": | |
123 port = int(config.getConfig( | |
124 conf, | |
125 "", | |
126 "bridge_pb_port", | |
127 8789 | |
128 )) | |
129 log.info(f"using TCP Socket at port {port}") | |
130 reactor.listenTCP(port, pb.PBServerFactory(self.root)) | |
131 else: | |
132 raise ValueError(f"Unknown pb connection type: {conn_type!r}") | |
107 | 133 |
108 def sendSignal(self, name, *args, **kwargs): | 134 def sendSignal(self, name, *args, **kwargs): |
109 self.root.sendSignal(name, args, kwargs) | 135 self.root.sendSignal(name, args, kwargs) |
110 | 136 |
111 def remote_initBridge(self, signals_handler): | 137 def remote_initBridge(self, signals_handler): |
115 def register_method(self, name, callback): | 141 def register_method(self, name, callback): |
116 log.debug("registering PB bridge method [%s]" % name) | 142 log.debug("registering PB bridge method [%s]" % name) |
117 setattr(self.root, "remote_" + name, callback) | 143 setattr(self.root, "remote_" + name, callback) |
118 # self.root.register_method(name, callback) | 144 # self.root.register_method(name, callback) |
119 | 145 |
120 def addMethod(self, name, int_suffix, in_sign, out_sign, method, async_=False, doc={}): | 146 def addMethod( |
147 self, name, int_suffix, in_sign, out_sign, method, async_=False, doc={} | |
148 ): | |
121 """Dynamically add a method to PB Bridge""" | 149 """Dynamically add a method to PB Bridge""" |
122 # FIXME: doc parameter is kept only temporary, the time to remove it from calls | 150 # FIXME: doc parameter is kept only temporary, the time to remove it from calls |
123 log.debug("Adding method {name} to PB bridge".format(name=name)) | 151 log.debug("Adding method {name} to PB bridge".format(name=name)) |
124 self.register_method(name, method) | 152 self.register_method(name, method) |
125 | 153 |