diff options
author | Melody Horn <melody@boringcactus.com> | 2021-03-07 09:49:58 -0700 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2021-03-07 09:49:58 -0700 |
commit | c8cfeabc011bfabb6303023a969155ded926d95c (patch) | |
tree | 0c8ca2f7b6e8d6923e8daafa7c87c5d31764f0c1 /src/world.rs | |
parent | 36d5ff553a1d65d70da5251b8865d62294c929f6 (diff) | |
download | hope-c8cfeabc011bfabb6303023a969155ded926d95c.tar.gz hope-c8cfeabc011bfabb6303023a969155ded926d95c.zip |
another crumb or two of architecture tweaks
Diffstat (limited to 'src/world.rs')
-rw-r--r-- | src/world.rs | 12 |
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) } |