comparison sat/bridge/bridge_constructor/constructors/pb/pb_core_template.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