aboutsummaryrefslogtreecommitdiff
path: root/src/world.rs
diff options
context:
space:
mode:
authorMelody Horn <melody@boringcactus.com>2021-03-07 09:49:58 -0700
committerMelody Horn <melody@boringcactus.com>2021-03-07 09:49:58 -0700
commitc8cfeabc011bfabb6303023a969155ded926d95c (patch)
tree0c8ca2f7b6e8d6923e8daafa7c87c5d31764f0c1 /src/world.rs
parent36d5ff553a1d65d70da5251b8865d62294c929f6 (diff)
downloadhope-c8cfeabc011bfabb6303023a969155ded926d95c.tar.gz
hope-c8cfeabc011bfabb6303023a969155ded926d95c.zip
another crumb or two of architecture tweaks
Diffstat (limited to 'src/world.rs')
-rw-r--r--src/world.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/world.rs b/src/world.rs
index 53217e2..1fbc4fe 100644
--- a/src/world.rs
+++ b/src/world.rs
@@ -1,11 +1,13 @@
use std::collections::HashMap;
-use std::sync::mpsc::{self, Receiver, Sender};
+use std::sync::mpsc::{self, Receiver, SyncSender};
use std::thread;
use uuid::Uuid;
use crate::actor::{Actorful, Value, Slot};
+const CHANNEL_SIZE: usize = 5;
+
pub struct ActorThreadId(Uuid);
#[derive(Default)]
@@ -19,9 +21,9 @@ impl World {
self.actor_types.insert(name, actor);
}
- pub fn spawn_actor(&mut self, r#type: &str) -> (Uuid, HashMap<String, Sender<Value>>, HashMap<String, Receiver<Value>>) {
- fn make_channels(slot: Slot) -> ((String, Sender<Value>), (String, Receiver<Value>)) {
- let (sender, receiver) = mpsc::channel::<Value>();
+ pub fn spawn_actor(&mut self, r#type: &str) -> (Uuid, HashMap<String, SyncSender<Value>>, HashMap<String, Receiver<Value>>) {
+ fn make_channels(slot: Slot) -> ((String, SyncSender<Value>), (String, Receiver<Value>)) {
+ let (sender, receiver) = mpsc::sync_channel::<Value>(CHANNEL_SIZE);
((slot.name.clone(), sender), (slot.name, receiver))
}
@@ -40,7 +42,7 @@ impl World {
let id = Uuid::new_v4();
thread::Builder::new()
.name(id.to_string())
- .spawn(move || actor.launch(input_receivers, output_senders, self))
+ .spawn(actor.launch(input_receivers, output_senders, self))
.unwrap();
(id, input_senders, output_receivers)
}