black-mamba/mods/signalpeer.py

42 lines
1.2 KiB
Python

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())