aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrooks J Rady <b.j.rady@gmail.com>2021-01-05 13:33:23 +0000
committerBrooks J Rady <b.j.rady@gmail.com>2021-01-05 13:33:23 +0000
commit6f1546a5cb4d666a04c23da41cc2027442fb8ed7 (patch)
treed74e76eb2f757f50950701170cbd472a2ff0f3ae /src
parentMerge pull request #126 from mosaic-org/wasm-launchable (diff)
downloadsl0ppij-6f1546a5cb4d666a04c23da41cc2027442fb8ed7.tar.gz
sl0ppij-6f1546a5cb4d666a04c23da41cc2027442fb8ed7.tar.xz
sl0ppij-6f1546a5cb4d666a04c23da41cc2027442fb8ed7.zip
Keeping track of multiple plugins
Diffstat (limited to 'src')
-rw-r--r--src/layout.rs1
-rw-r--r--src/main.rs19
-rw-r--r--src/tests/fixtures/layouts/panes-with-plugins.yaml2
3 files changed, 17 insertions, 5 deletions
diff --git a/src/layout.rs b/src/layout.rs
index 1e876532..03a1cf1f 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -177,7 +177,6 @@ impl Layout {
// FIXME: I probably shouldn't exist, much less with PathBuf (use &Path)
#[cfg(feature = "wasm-wip")]
pub fn list_plugins(&self) -> Vec<&PathBuf> {
- dbg!(&self);
let mut plugins: Vec<_> = self.parts.iter().flat_map(Layout::list_plugins).collect();
if let Some(path) = &self.plugin {
plugins.push(path);
diff --git a/src/main.rs b/src/main.rs
index 3c70414a..bff2f701 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -418,24 +418,27 @@ pub fn start(mut os_input: Box<dyn OsApi>, opts: Opt) {
.spawn(move || {
use crate::errors::PluginContext;
use crate::wasm_vm::{mosaic_imports, wasi_stdout};
- use std::io;
+ use std::{io, collections::HashMap};
use wasmer::{ChainableNamedResolver, Instance, Module, Store, Value};
use wasmer_wasi::{Pipe, WasiState};
let store = Store::default();
+ let mut plugin_id = 0;
+ let mut plugin_map = HashMap::new();
+
loop {
let (event, mut err_ctx) = receive_plugin_instructions
.recv()
.expect("failed to receive event on channel");
err_ctx.add_call(ContextType::Plugin(PluginContext::from(&event)));
- // FIXME: Clueless on how many of these lines I need...
+ // FIXME: Add a line for every other thread that this one calls out to
// screen.send_app_instructions.update(err_ctx);
// screen.send_pty_instructions.update(err_ctx);
match event {
PluginInstruction::Load(path) => {
// FIXME: Cache this compiled module on disk. I could use `(de)serialize_to_file()` for that
- let module = Module::from_file(&store, path).unwrap();
+ let module = Module::from_file(&store, &path).unwrap();
let output = Pipe::new();
let input = Pipe::new();
@@ -456,6 +459,15 @@ pub fn start(mut os_input: Box<dyn OsApi>, opts: Opt) {
let mosaic = mosaic_imports(&store, &wasi_env);
let instance = Instance::new(&module, &mosaic.chain_back(wasi)).unwrap();
+ debug_log_to_file(format!("Loaded {}({}) from {}", instance.module().name().unwrap(), plugin_id, path.display())).unwrap();
+ plugin_map.insert(plugin_id, instance);
+ plugin_id += 1;
+
+ // FIXME: End the loading block here
+
+ // FIXME: Yucky line
+ let instance = plugin_map.get(&(plugin_id - 1)).unwrap();
+
let start = instance.exports.get_function("_start").unwrap();
let handle_key = instance.exports.get_function("handle_key").unwrap();
let draw = instance.exports.get_function("draw").unwrap();
@@ -491,7 +503,6 @@ pub fn start(mut os_input: Box<dyn OsApi>, opts: Opt) {
} */
break;
}
- debug_log_to_file("WASM module loaded and exited cleanly :)".to_string()).unwrap();
}
PluginInstruction::Quit => break,
i => panic!("Yo, dawg, nice job calling the wasm thread!\n {:?} is defo not implemented yet...", i),
diff --git a/src/tests/fixtures/layouts/panes-with-plugins.yaml b/src/tests/fixtures/layouts/panes-with-plugins.yaml
index 09913bb4..075228fb 100644
--- a/src/tests/fixtures/layouts/panes-with-plugins.yaml
+++ b/src/tests/fixtures/layouts/panes-with-plugins.yaml
@@ -12,6 +12,8 @@ parts:
Percent: 80
split_size:
Percent: 80
+ plugin: strider.wasm
- direction: Vertical
split_size:
Percent: 20
+ plugin: strider.wasm