use crate::actors::actor_ref_factory::ActorRefFactory;
use crate::actors::abstract_actor_ref::ActorRef;
use crate::actors::watcher::WatchingEvents;
use crate::actors::scheduler::Scheduler;
use crate::actors::dispatcher::Dispatcher;
use crate::common::tsafe::TSafe;
use crate::executors::executor::Executor;
use std::collections::HashMap;
pub trait AbstractActorSystem: ActorRefFactory {
fn get_scheduler(&self) -> TSafe<Scheduler>;
fn register_watch_event(&self, from: &ActorRef, event: WatchingEvents);
fn terminate(&mut self);
fn add_dispatcher(&mut self, name: &str, dispatcher: TSafe<Dispatcher + Send>);
fn get_dispatcher(&self, name: &str) -> TSafe<Dispatcher + Send>;
fn get_dispatchers(&self) -> TSafe<HashMap<String, TSafe<Dispatcher + Send>>>;
fn get_executor(&self, name: &str) -> TSafe<Executor + Send>;
fn get_nid(&mut self) -> String;
}