M2-PT-DRP/source/managers/Manager.py

44 lines
1.3 KiB
Python

import threading
from source import packets
from source.behaviors import events
class Manager:
"""
Global manager
"""
def __init__(self, interface: str):
from . import CommunicationManager, EventManager, RoleManager
# communication manager
self.communication = CommunicationManager(self, interface)
self.communication.register_packet_type(b"DISC", packets.DiscoveryPacket)
self.communication.register_packet_type(b"PEER", packets.PeerPacket)
# event manager
self.event = EventManager(self)
self.event.register_event_handler(packets.DiscoveryPacket, events.DiscoveryEvent(self))
self.event.register_event_handler(packets.PeerPacket, events.PeerEvent(self))
# role manager
self.role = RoleManager(self)
# set of addresses associated to their peer
self.peers: dict[tuple, packets.PeerPacket] = {}
def loop(self) -> None:
"""
Handle the event and role managers forever
"""
# run a thread for the event and the role manager
event_thread = threading.Thread(target=self.event.loop)
role_thread = threading.Thread(target=self.role.loop)
event_thread.start()
role_thread.start()
event_thread.join()
role_thread.join()