This commit is contained in:
ciomek committed 2026-01-27 22:26:03 +01:00
1 parent f74da858ed
commit e8731bf370
18 files changed
+42 -51

No files matched your search

+71
View File
@@ -0,0 +1,71 @@
import threading
from colony.core.context import RoleContext
from colony.core.state_manager import StateManager
from colony.core.logger.logging import get_logger
class RoleManager:
def __init__(self, network, role_registry):
self.network = network
self.role_registry = role_registry
self.logger = get_logger(self.__class__.__name__)
def initialize_roles(self):
self.logger.info("Initializing roles...")
context = RoleContext(self.network, self)
roles = {}
for role_name in StateManager().get(StateManager.Data.Roles):
role_cls = self.role_registry.get_role_class_by_name(role_name)
self.logger.debug(f"Creating instance of role {role_name}. ")
role_instance = role_cls(context=context)
roles[role_name] = role_instance
self.network.self_node.roles = [role for role in roles.keys()]
self.network.self_node.set_role_instances(roles)
self.logger.info(f"Roles initialized: {list(roles.keys())}. ")
def get_role_instances(self):
return self.network.self_node.get_role_instances()
def start_all(self):
for role_name, role in self.get_role_instances().items():
self.logger.info(f"Starting role {role_name}")
t = threading.Thread(target=role.start, daemon=True, name=role_name)
t.start()
self.logger.debug(f"Thread started for role {role_name}: {t.name}")
def set_roles(self, new_roles):
self.logger.info("Updating roles...")
current_roles = self.get_role_instances()
roles_to_remove = set(current_roles) - set(new_roles)
roles_to_add = set(new_roles) - set(current_roles)
for role_name in roles_to_remove:
self.logger.debug(f"Stopping and removing role {role_name}")
current_roles[role_name].stop()
del current_roles[role_name]
context = RoleContext(self.network, self)
for role_name in roles_to_add:
self.logger.debug(f"Creating and adding new role {role_name}")
role_cls = self.role_registry.get_role_class_by_name(role_name)
current_roles[role_name] = role_cls(context=context)
StateManager().set(StateManager.Data.Roles, list(current_roles.keys()))
self.network.self_node.roles = list(current_roles.keys())
self.network.self_node.set_role_instances(current_roles)
for role_name in roles_to_add:
role = current_roles[role_name]
self.logger.info(f"Starting role {role_name}")
t = threading.Thread(target=role.start, daemon=True, name=role_name)
t.start()
self.logger.debug(f"Thread started for role {role_name}: {t.name}")
self.logger.info(f"Roles updated to: {list(current_roles.keys())}")