Module runtimes, pass manager into modules.

This commit is contained in:
Michael Mikovsky
2025-11-06 15:49:47 -07:00
parent 3e0d927465
commit 0a9b86edfa
8 changed files with 438 additions and 71 deletions
+6 -17
View File
@@ -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(())
}() {
-31
View File
@@ -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!");
}
}