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