mirror of
https://github.com/Astatin3/unshell.git
synced 2026-06-09 06:47:59 -06:00
Module runtimes, pass manager into modules.
This commit is contained in:
@@ -1,15 +1,9 @@
|
||||
// #![no]
|
||||
use unshell_modules::{Manager, Module, ModuleError, module_interface};
|
||||
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
mod manager;
|
||||
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use unshell_modules::{Module, ModuleError, module_interface};
|
||||
|
||||
use crate::manager::Manager;
|
||||
// use unshell_modules::{Module, ModuleError, module_interface};
|
||||
|
||||
module_interface! {
|
||||
Interface {
|
||||
@@ -19,9 +13,8 @@ module_interface! {
|
||||
}
|
||||
}
|
||||
|
||||
// const modules: Arc<Mutex<Vec<Module>>> = Arc::new(Mutex::new(Vec::new()));
|
||||
|
||||
fn main() {
|
||||
// Init the logger (This uses like 600MB of storage)
|
||||
pretty_env_logger::init();
|
||||
|
||||
info!("Initalized");
|
||||
@@ -31,15 +24,11 @@ fn main() {
|
||||
|
||||
let mut modules = Vec::new();
|
||||
for arg in args.skip(1) {
|
||||
info!("Loading module: {}", arg);
|
||||
modules.push(Module::new(&arg)?)
|
||||
}
|
||||
let _manager = Manager::new(modules);
|
||||
|
||||
// for i in 1..args.len() {}
|
||||
|
||||
// let interface = module.get_interface::<Interface>()?;
|
||||
|
||||
// interface.test1();
|
||||
Manager::run(modules);
|
||||
// manager.join();
|
||||
|
||||
Ok(())
|
||||
}() {
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
use unshell_modules::{ManagerInterface, Module};
|
||||
|
||||
pub struct Manager {
|
||||
modules: Vec<Module>,
|
||||
}
|
||||
|
||||
impl Manager {
|
||||
pub fn new(modules: Vec<Module>) -> Self {
|
||||
let this = Self { modules };
|
||||
|
||||
let interface = this.get_interface();
|
||||
|
||||
for module in &this.modules {
|
||||
if let Ok(init) = module.get_symbol::<fn(ManagerInterface)>(b"init") {
|
||||
init(interface.clone());
|
||||
} else {
|
||||
warn!("init not found");
|
||||
}
|
||||
}
|
||||
|
||||
this
|
||||
}
|
||||
|
||||
pub fn get_interface(&self) -> ManagerInterface {
|
||||
ManagerInterface::from_raw(Self::test123)
|
||||
}
|
||||
|
||||
pub extern "C" fn test123() {
|
||||
info!("Manager Test Sucsessfull!");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user