63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
import threading
|
|
from pathlib import Path
|
|
|
|
from source import packets
|
|
from source.behaviors import events
|
|
|
|
|
|
class Manager:
|
|
"""
|
|
Global manager
|
|
"""
|
|
|
|
def __init__(self, interface: str):
|
|
from . import CommunicationManager, EventManager, RoleManager, AudioManager, PeerManager
|
|
|
|
self.storage = Path("./storage/")
|
|
self.storage.mkdir(exist_ok=True)
|
|
|
|
# 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)
|
|
self.communication.register_packet_type(b"AUDI", packets.AudioPacket)
|
|
self.communication.register_packet_type(b"RQSK", packets.RequestKeyPacket)
|
|
self.communication.register_packet_type(b"GTSK", packets.KeyPacket)
|
|
|
|
# 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))
|
|
self.event.register_event_handler(packets.AudioPacket, events.AudioEvent(self))
|
|
self.event.register_event_handler(packets.RequestKeyPacket, events.RequestKeyEvent(self))
|
|
self.event.register_event_handler(packets.KeyPacket, events.KeyEvent(self))
|
|
|
|
# role manager
|
|
self.role = RoleManager(self)
|
|
|
|
# audio manager
|
|
self.audio = AudioManager(self)
|
|
|
|
# peer manager
|
|
self.peer = PeerManager(self)
|
|
|
|
def loop(self) -> None:
|
|
"""
|
|
Handle the sub-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)
|
|
audio_thread = threading.Thread(target=self.audio.loop)
|
|
peer_thread = threading.Thread(target=self.peer.loop)
|
|
|
|
event_thread.start()
|
|
role_thread.start()
|
|
audio_thread.start()
|
|
peer_thread.start()
|
|
|
|
event_thread.join()
|
|
role_thread.join()
|
|
audio_thread.join()
|
|
peer_thread.join()
|