42 lines
1.2 KiB
Python
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())
|