1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//! # Actix-Broker
//!
//! The `actix_broker` crate contains a Broker `SystemService` that keeps track of active
//! subscriptions to different `Messages`. This Broker service is automatically started
//! when an actor uses functions from the `BrokerSubscribe` and `BrokerIssue` traits to
//! either subscribe to or issue a message.
//!
//! ## Example 
//! ```rust,no_run
//! # #[macro_use]
//! # extern crate actix;
//! # extern crate actix_broker;
//! use actix::prelude::*;
//! // Bring both these traits into scope.
//! use actix_broker::{BrokerSubscribe, BrokerIssue};
//!
//! // Note: The message must implement 'Clone'
//! #[derive(Clone, Message)]
//! struct MessageOne;
//!
//! #[derive(Clone, Message)]
//! struct MessageTwo;
//!
//! #[derive(Clone, Message)]
//! struct MessageThree;
//!
//! struct ActorOne;
//!
//! impl Actor for ActorOne {
//!     // Note: The actor context must be Asynchronous, 
//!     // i.e. it cannot be 'SyncContext'
//!     type Context = Context<Self>;
//!
//!     fn started(&mut self,ctx: &mut Self::Context) {
//!         // Asynchronously subscribe to a message
//!         self.subscribe_async::<MessageOne>(ctx);
//!         // Asynchronously issue a message to any subscribers
//!         self.issue_async(MessageOne);
//!         // Synchronously subscribe to a message
//!         self.subscribe_sync::<MessageTwo>(ctx);
//!         // Synchronously issue a message to any subscribers
//!         self.issue_sync(MessageTwo, ctx);
//!     }
//! }
//!     
//!     // To subscribe to a messsage, the actor must handle it
//! impl Handler<MessageOne> for ActorOne {
//!     type Result = ();
//!
//!     fn handle(&mut self, msg: MessageOne, ctx: &mut Self::Context) {
//!         // An actor does not have to handle a message to just issue it
//!         self.issue_async(MessageThree);
//!     }
//! }
//!
//!     // Handler for MessageTwo...
//! # impl Handler<MessageTwo> for ActorOne {
//! #     type Result = ();
//!
//! #     fn handle(&mut self, msg: MessageTwo, ctx: &mut Self::Context) {
//! #     }
//! # }
//! # fn main() {}
//! ```
#[macro_use]
extern crate actix;
extern crate fnv;
#[macro_use]
extern crate log;

mod broker;
mod issue;
mod msgs;
mod subscribe;

pub use broker::Broker;

pub use subscribe::BrokerSubscribe;

pub use issue::BrokerIssue;