Crates.io | d3-components |
lib.rs | d3-components |
version | 0.1.3 |
source | src |
created_at | 2020-10-18 00:45:36.258647 |
updated_at | 2020-11-13 08:04:36.030358 |
description | A framework for server development -- the component layer |
homepage | https://github.com/BruceBrown/d3 |
repository | https://github.com/BruceBrown/d3/tree/master/d3-components |
max_upload_size | |
id | 301744 |
size | 52,805 |
The components layer provides an organization hierarchy for machines. It is based upon a Component/Coordinator/Connector model, and while not the only possible model, it is one I like. This layer is where the network is exposed. It is an adapter wrapping Mio.
Add this to your Cargo.toml
:
[dependencies]
d3-derive = "0.1.3"
d3-core = "0.1.3"
d3-components = "0.1.3"
#[macro_use]
extern crate d3_derive;
use d3_core::machine_impl::*;
use d3_core::executor;
use d3_components::network;
// A trivial Alice
pub struct Alice {}
// Implement the Machine trait for Alice
impl Machine<network::NetCmd> for Alice {
fn receive(&self, cmd: StateTable) {
}
}
// Start the scheduler and executor and network
executor::start_server();
network::start_network();
// create the Machine from Alice, getting back a machine and Sender<StateTable>.
let (alice, sender) = executor::connect(Alice{});
// send a command to the network asking for Alice to
// be notified if a connection is received for 127.0.0.1:4000
let cmd = NetCmd::BindListener("127.0.0.1:4000".to_string, sender);
network::get_network_sender().send(cmd).expect("send failed");
// Stop the scheduler and executor and network
network::start_network();
executor::stop_server();