use libzmq::{prelude::*, *};
use std::thread;
fn main() -> Result<(), anyhow::Error> {
let addr: InprocAddr = InprocAddr::new_unique();
let server = ServerBuilder::new().bind(&addr).build()?;
let handle = thread::spawn(move || -> Result<(), Error> {
loop {
let request = server.recv_msg()?;
assert_eq!(request.to_str(), Ok("ping"));
let id = request.routing_id().unwrap();
server.route("pong", id).map_err(Error::cast)?;
}
});
let client = ClientBuilder::new().connect(addr).build()?;
client.send("ping")?;
let msg = client.recv_msg()?;
assert_eq!(msg.to_str(), Ok("pong"));
Ctx::global().shutdown();
let err = handle.join().unwrap().unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidCtx);
Ok(())
}
#[cfg(test)]
mod tests {
use super::main;
#[test]
fn main_runs() {
main().unwrap();
}
}