Module dharma::bridge
[−]
[src]
Communication between two endpoints in different threads.
This module implements generic communication between two points (possibly two threads) in
single-producer multi-consumer style. Sender
constitutes input point while Receiver
constitutes output point. Sender
s and Receiver
s can be freely binded with connect
function, so single Sender
may send to many Receiver
s and single Receiver
may receive from
many Sender
s.
For cases when it is needed to ensure that only one Receiver
is connected one should use
DirectSender
instead of Sender
.
Example
use dharma::{connect, Sender, Receiver, ReceiveResult}; #[derive(Clone, PartialEq, Debug)] enum E { A, B, C, D } let mut s1 = Sender::new(); let mut s2 = Sender::new(); let mut r1 = Receiver::new(); let mut r2 = Receiver::new(); connect(&mut s1, &r1); connect(&mut s1, &r2); connect(&mut s2, &r2); std::thread::spawn(move || { s1.send_plain(E::A); s1.send_plain(E::B); s2.send_plain(E::C); s2.send_plain(E::D); }); assert!(r1.recv().is_plain(E::A)); assert!(r2.recv().is_plain(E::A)); assert!(r1.recv().is_plain(E::B)); assert!(r2.recv().is_plain(E::B)); assert!(r1.try_recv().is_empty()); assert!(r2.recv().is_plain(E::C)); assert!(r2.recv().is_plain(E::D)); assert!(r2.try_recv().is_empty());
Structs
DirectSender |
Allows sending data to one |
Receiver |
Allows receiving data from |
Sender |
Allows sending data to many |
Enums
ReceiveResult |
Result returned from |
SpecialCommand |
Enumeration for special type of command. |
Functions
connect |
Connect given |
direct_connect |
Connect given |
Type Definitions
SignalId |
Type alias for signal IDs. |