81 lines
3.3 KiB
Python
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") |