Added libs
This commit is contained in:
84
noSys/peers.py
Normal file
84
noSys/peers.py
Normal file
@@ -0,0 +1,84 @@
|
||||
import enum
|
||||
class ConnectionState(enum.Enum):
|
||||
DISCONNECTED = 0
|
||||
CONNECTING = 1
|
||||
CONNECTED = 2
|
||||
|
||||
from libs.fspn.protocol.connection import Connection
|
||||
|
||||
class Peer:
|
||||
"""Represents a peer in the network."""
|
||||
|
||||
def __init__(self, id: str, connection: Connection):
|
||||
self.id = id
|
||||
self.connection:Connection = connection
|
||||
self.state = ConnectionState.DISCONNECTED
|
||||
self.modules = {}
|
||||
self.networks = {}
|
||||
|
||||
def has_module(self, module_id:str):
|
||||
return module_id in self.modules
|
||||
|
||||
def has_network(self, network_id:str):
|
||||
return network_id in self.networks
|
||||
|
||||
def is_connected(self):
|
||||
return self.state == ConnectionState.CONNECTED
|
||||
|
||||
def get_my_user(self):
|
||||
return self.connection.security.user
|
||||
|
||||
def get_peer_user(self):
|
||||
return self.connection.security.peer_user
|
||||
|
||||
|
||||
class PeerManager:
|
||||
"""Handles connection and storage of peers."""
|
||||
|
||||
def __init__(self, nosys_core):
|
||||
from .noSysCore import NoSysCore
|
||||
self.nosys_core:NoSysCore = nosys_core
|
||||
self.peers:dict[str, Peer] = {}
|
||||
|
||||
def create_peer(self, connection:Connection):
|
||||
return Peer(connection.id, connection)
|
||||
|
||||
def add_peer(self, peer: Peer):
|
||||
self.peers[peer.id] = peer
|
||||
|
||||
def get_peer(self, peer_id:str) -> Peer:
|
||||
return self.peers.get(peer_id, None)
|
||||
|
||||
def remove_peer(self, peer_id: str):
|
||||
self.peers.pop(peer_id, None)
|
||||
|
||||
def get_online_peers(self) -> list[Peer]:
|
||||
return self.get_peers_in_state(ConnectionState.CONNECTED)
|
||||
|
||||
def get_connecting_peers(self) -> list[Peer]:
|
||||
return self.get_peers_in_state(ConnectionState.CONNECTING)
|
||||
|
||||
def get_offline_peers(self) -> list[Peer]:
|
||||
return self.get_peers_in_state(ConnectionState.DISCONNECTED)
|
||||
|
||||
def get_peers_in_state(self, state):
|
||||
peers:list[Peer] = []
|
||||
for id, peer in self.peers.items():
|
||||
if peer.state == state:
|
||||
peers.append(peer)
|
||||
return peers
|
||||
|
||||
def get_by_peer_user_id(self, user_id):
|
||||
peers:list[Peer] = []
|
||||
for id, peer in self.peers.items():
|
||||
if peer.get_peer_user() == user_id and peer.is_connected():
|
||||
peers.append(peer)
|
||||
return peers
|
||||
|
||||
def get_by_network_id(self, networks):
|
||||
peers:list[Peer] = []
|
||||
for id, peer in self.peers.items():
|
||||
for peer_network_id in peer.networks:
|
||||
if peer_network_id in networks:
|
||||
peers.append(peer)
|
||||
return peers
|
||||
Reference in New Issue
Block a user