import rpyc from . import const from . import typedefs from .settings import settings from uuid import uuid4 from sqlitedict import SqliteDict from . import helpers peer = {} my_id = uuid4().hex class SignalpeerService(rpyc.Service): signalpeerkvstore = None peer_id = None exposed_peer_type = typedefs.SIGNALPEER def on_connect(self, conn): self.peer_id = uuid4().hex if conn.root.pid == my_id: conn.close() return self.signalpeerkvstore = SqliteDict(const.signalpeers_db, autocommit=True) peer[self.peer_id] = conn peer_type = conn.root.peer_type if peer_type == typedefs.SIGNALPEER: helpers.store_signalpeer(conn, self.signalpeerkvstore) helpers.merge_signalpeers(conn.root.signal_peers, self.signalpeerkvstore) def on_disconnect(self, conn): if self.peer_id in peer: peer.pop(self.peer_id) @property def exposed_peer_port(self): return settings.listen_port @property def exposed_peer_cname(self): return settings.cname @property def exposed_pid(self): return my_id @property def exposed_signal_peers(self): return dict(self.signalpeerkvstore.items())