Files
nosys_libs/rendezvous/rendezvousClient.py
2026-01-25 13:55:46 +10:00

81 lines
3.3 KiB
Python

import ipaddress
from libs.noSys.noSysModule import NoSysModule
from libs.noSys.events import Events as nosys_events, DynamicEvents as nosys_dynamic_events
from libs.noSys.peers import Peer
from .rendezvousClientApiBlueprint import Blueprint
from .rendezvousClientSocketio import HandlerSocketio
from libs.app.common.logging import get_logger
logger = get_logger()
# TODO Constants file
RENDEZVOUS_SERVER_MODULE = ("rendezvous", "rendezvousServer")
class RendezvousClientEvents:
SERVER_CONNECTED = "server_connected"
SERVER_CONNECTION_ERROR = "server_connection_error"
SERVER_DISCONNECTED = "server_disconnected"
# TODO PMC class inheritance
class RendezvousClient(NoSysModule):
def __init__(self, nosys_core):
super().__init__(nosys_core)
self.connections:dict[str, Peer] = {}
def setup(self):
self.nosys_core.modules.api.register_blueprint(Blueprint(self).blueprint)
self.nosys_core.modules.api.register_socketio(HandlerSocketio(self))
self.nosys_core.subscribe_event(nosys_dynamic_events.module_connection(RENDEZVOUS_SERVER_MODULE[0], RENDEZVOUS_SERVER_MODULE[1]), self.on_peer_module_server)
def on_nosys_ready(self, event):
pass
def connect_to_server(self, address, user_id):
peer, connect = self.nosys_core.connections.create_connection(address, user_id)
self.connections[peer.id] = peer
self.nosys_core.subscribe_event(nosys_dynamic_events.peer_connection(peer.id), self.on_server_connection)
self.nosys_core.subscribe_event(nosys_dynamic_events.peer_connection_error(peer.id), self.on_server_connection_error)
self.nosys_core.subscribe_event(nosys_dynamic_events.peer_disconnection(peer.id), self.on_server_disconnection)
connect()
return peer
def on_peer_module_server(self, event):
peer:Peer = event.peer
if peer.id in self.connections:
print("SERVER CONNECTED")
else:
print("RANDOM SERVER CONNECTED")
self.connections[peer.id] = peer
def on_module_connection_server(self, event):
pass
def on_module_message(self, event):
handler_action = getattr(self, 'on_'+event.data['action'])
handler_action(event)
def send_get_random_peer(self, peer_id, network_id):
body = {"action":"get_random_peer"}
self.nosys_core.dispatcher.send_message(body, peer_id, RENDEZVOUS_SERVER_MODULE)
def on_random_peer(self, event):
peer:Peer = event.peer
address = event.data["address"]
if address:
address = address.split(':')
self.nosys_core.connections.connect(address=(address[0], int(address[1])), user_id=self.connections[peer.id].connection.security.user, bind_address=peer.connection.bind_address)
else:
pass
def on_server_connection(self, event):
self.fire_event(RendezvousClientEvents.SERVER_CONNECTED, peer=event.peer)
print("CLIENT SERVER CONNECTED")
def on_server_connection_error(self, event):
self.fire_event(RendezvousClientEvents.SERVER_CONNECTION_ERROR, peer=event.peer, error=event.error)
print("CLIENT SERVER ERROR")
def on_server_disconnection(self, event):
self.fire_event(RendezvousClientEvents.SERVER_DISCONNECTED, peer=event.peer)
print("CLIENT SERVER DISCONNECTED")