|
|
@ -2,37 +2,44 @@
|
|
|
|
//! messagepack. All calls are asynchronous and event based.
|
|
|
|
//! messagepack. All calls are asynchronous and event based.
|
|
|
|
//! Client Example:
|
|
|
|
//! Client Example:
|
|
|
|
//! ```no_run
|
|
|
|
//! ```no_run
|
|
|
|
//! use rmp_ipc::IPCBuilder;
|
|
|
|
//! use rmp_ipc::{callback, Event, context::Context, IPCBuilder, error::Result};
|
|
|
|
//! // create the client
|
|
|
|
|
|
|
|
//! # async fn a() {
|
|
|
|
|
|
|
|
//!
|
|
|
|
//!
|
|
|
|
//! let ctx = IPCBuilder::new()
|
|
|
|
//! /// Callback ping function
|
|
|
|
//! .address("127.0.0.1:2020")
|
|
|
|
//! async fn handle_ping(ctx: &Context, event: Event) -> Result<()> {
|
|
|
|
//! // register callback
|
|
|
|
//! println!("Received ping event.");
|
|
|
|
//! .on("ping", |ctx, event| Box::pin(async move {
|
|
|
|
//! ctx.emitter.emit_response(event.id(), "pong", ()).await?;
|
|
|
|
//! println!("Received ping event.");
|
|
|
|
|
|
|
|
//! ctx.emitter.emit_response(event.id(), "pong", ()).await?;
|
|
|
|
|
|
|
|
//! Ok(())
|
|
|
|
|
|
|
|
//! }))
|
|
|
|
|
|
|
|
//! .namespace("mainspace-client")
|
|
|
|
|
|
|
|
//! .on("something", |ctx, event| Box::pin(async move {
|
|
|
|
|
|
|
|
//! println!("I think the server did something");
|
|
|
|
|
|
|
|
//! ctx.emitter.emit_response_to(event.id(), "mainspace-server", "ok", ()).await?;
|
|
|
|
|
|
|
|
//! Ok(())
|
|
|
|
|
|
|
|
//! }))
|
|
|
|
|
|
|
|
//! .build()
|
|
|
|
|
|
|
|
//! .build_client().await.unwrap();
|
|
|
|
|
|
|
|
//!
|
|
|
|
//!
|
|
|
|
//! // emit an initial event
|
|
|
|
//! Ok(())
|
|
|
|
//! let response = ctx.emitter.emit("ping", ()).await.unwrap().await_reply(&ctx).await.unwrap();
|
|
|
|
//! }
|
|
|
|
//! assert_eq!(response.name(), "pong");
|
|
|
|
//!
|
|
|
|
//! # }
|
|
|
|
//! #[tokio::main]
|
|
|
|
|
|
|
|
//! async fn main() {
|
|
|
|
|
|
|
|
//! // create the client
|
|
|
|
|
|
|
|
//! let ctx = IPCBuilder::new()
|
|
|
|
|
|
|
|
//! .address("127.0.0.1:2020")
|
|
|
|
|
|
|
|
//! // register callback
|
|
|
|
|
|
|
|
//! .on("ping", callback!(handle_ping))
|
|
|
|
|
|
|
|
//! .namespace("mainspace-client")
|
|
|
|
|
|
|
|
//! // register callback inline
|
|
|
|
|
|
|
|
//! .on("something", callback!(ctx, event, async move {
|
|
|
|
|
|
|
|
//! println!("I think the server did something");
|
|
|
|
|
|
|
|
//! ctx.emitter.emit_response_to(event.id(), "mainspace-server", "ok", ()).await?;
|
|
|
|
|
|
|
|
//! Ok(())
|
|
|
|
|
|
|
|
//! }))
|
|
|
|
|
|
|
|
//! .build()
|
|
|
|
|
|
|
|
//! .build_client().await.unwrap();
|
|
|
|
|
|
|
|
//!
|
|
|
|
|
|
|
|
//! // emit an initial event
|
|
|
|
|
|
|
|
//! let response = ctx.emitter.emit("ping", ()).await.unwrap().await_reply(&ctx).await.unwrap();
|
|
|
|
|
|
|
|
//! assert_eq!(response.name(), "pong");
|
|
|
|
|
|
|
|
//! }
|
|
|
|
//! ```
|
|
|
|
//! ```
|
|
|
|
//!
|
|
|
|
//!
|
|
|
|
//! Server Example:
|
|
|
|
//! Server Example:
|
|
|
|
//! ```no_run
|
|
|
|
//! ```no_run
|
|
|
|
//! use typemap_rev::TypeMapKey;
|
|
|
|
//! use typemap_rev::TypeMapKey;
|
|
|
|
//! use rmp_ipc::IPCBuilder;
|
|
|
|
//! use rmp_ipc::IPCBuilder;
|
|
|
|
|
|
|
|
//! use rmp_ipc::callback;
|
|
|
|
//!
|
|
|
|
//!
|
|
|
|
//! struct MyKey;
|
|
|
|
//! struct MyKey;
|
|
|
|
//!
|
|
|
|
//!
|
|
|
@ -45,13 +52,13 @@
|
|
|
|
//! IPCBuilder::new()
|
|
|
|
//! IPCBuilder::new()
|
|
|
|
//! .address("127.0.0.1:2020")
|
|
|
|
//! .address("127.0.0.1:2020")
|
|
|
|
//! // register callback
|
|
|
|
//! // register callback
|
|
|
|
//! .on("ping", |ctx, event| Box::pin(async move {
|
|
|
|
//! .on("ping", callback!(ctx, event, async move {
|
|
|
|
//! println!("Received ping event.");
|
|
|
|
//! println!("Received ping event.");
|
|
|
|
//! ctx.emitter.emit_response(event.id(), "pong", ()).await?;
|
|
|
|
//! ctx.emitter.emit_response(event.id(), "pong", ()).await?;
|
|
|
|
//! Ok(())
|
|
|
|
//! Ok(())
|
|
|
|
//! }))
|
|
|
|
//! }))
|
|
|
|
//! .namespace("mainspace-server")
|
|
|
|
//! .namespace("mainspace-server")
|
|
|
|
//! .on("do-something", |ctx, event| Box::pin(async move {
|
|
|
|
//! .on("do-something", callback!(ctx, event, async move {
|
|
|
|
//! println!("Doing something");
|
|
|
|
//! println!("Doing something");
|
|
|
|
//! {
|
|
|
|
//! {
|
|
|
|
//! // access data
|
|
|
|
//! // access data
|
|
|
@ -75,11 +82,13 @@ mod tests;
|
|
|
|
pub mod error;
|
|
|
|
pub mod error;
|
|
|
|
mod events;
|
|
|
|
mod events;
|
|
|
|
mod ipc;
|
|
|
|
mod ipc;
|
|
|
|
|
|
|
|
mod macros;
|
|
|
|
mod namespaces;
|
|
|
|
mod namespaces;
|
|
|
|
|
|
|
|
|
|
|
|
pub use events::error_event;
|
|
|
|
pub use events::error_event;
|
|
|
|
pub use events::event::Event;
|
|
|
|
pub use events::event::Event;
|
|
|
|
pub use ipc::builder::IPCBuilder;
|
|
|
|
pub use ipc::builder::IPCBuilder;
|
|
|
|
pub use ipc::*;
|
|
|
|
pub use ipc::*;
|
|
|
|
|
|
|
|
pub use macros::*;
|
|
|
|
pub use namespaces::builder::NamespaceBuilder;
|
|
|
|
pub use namespaces::builder::NamespaceBuilder;
|
|
|
|
pub use namespaces::namespace::Namespace;
|
|
|
|
pub use namespaces::namespace::Namespace;
|
|
|
|