Asynchronous event driven interprocess communication supporting tcp and unix domain sockets.
Client:
```rust use bromine::prelude::*; use tokio::net::TcpListener;
/// Callback ping function async fn handle_ping(ctx: &Context, event: Event) -> Result<()> { println!("Received ping event."); ctx.emit("pong", ()).await?; Ok(Response::empty()) }
async fn main() {
// create the client
let ctx = IPCBuilder::
// emit an event and wait for responses
let response = ctx.emit("ping", ()).await_reply().await?;
// emit an event and get all responses as stream
let stream = ctx.emit("ping", ()).stream_replies().await?;
while let Some(Ok(event)) = stream.next().await {
println!("{}", event.name());
}
} ```
Server:
```rust use bromine::prelude::*; use tokio::net::TcpListener; // create the server
async fn main() {
IPCBuilder::
Client:
```rust use bromine::prelude::*; use tokio::net::TcpListener; // create the client
async fn main() {
let ctx = IPCBuilder::
// emit an initial event let response = ctx.emitto("mainspace-server", "ping", ()) .awaitresponse().await?; } ```
Server:
```rust use bromine::prelude::*; use tokio::net::TcpListener; // create the server
pub struct MyNamespace;
impl MyNamespace { async fn ping(_ctx: &Context, _event: Event) -> Result<()> { println!("My namespace received a ping"); Ok(()) } }
impl NamespaceProvider for MyNamespace { fn name() -> &'static str {"my_namespace"}
fn register(handler: &mut EventHandler) {
events!(handler,
"ping" => Self::ping
);
}
}
async fn main() {
IPCBuilder::
Benchmarks are generated on each commit. They can be reviewed here.
Apache-2.0