feat: remove is_available's node mut-ref dependency, also remove the !Sync constraint
on the future returned
This commit is contained in:
parent
13902524f7
commit
17584344c2
|
|
@ -10,7 +10,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let ctx = r2r::Context::create()?;
|
let ctx = r2r::Context::create()?;
|
||||||
let mut node = r2r::Node::create(ctx, "testnode", "")?;
|
let mut node = r2r::Node::create(ctx, "testnode", "")?;
|
||||||
let client = node.create_action_client::<Fibonacci::Action>("/fibonacci")?;
|
let client = node.create_action_client::<Fibonacci::Action>("/fibonacci")?;
|
||||||
let action_server_available = node.is_available(&client)?;
|
let action_server_available = r2r::Node::is_available(&client)?;
|
||||||
|
|
||||||
// signal that we are done
|
// signal that we are done
|
||||||
let done = Arc::new(Mutex::new(false));
|
let done = Arc::new(Mutex::new(false));
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let mut node = r2r::Node::create(ctx, "testnode", "")?;
|
let mut node = r2r::Node::create(ctx, "testnode", "")?;
|
||||||
let client =
|
let client =
|
||||||
node.create_action_client_untyped("/fibonacci", "example_interfaces/action/Fibonacci")?;
|
node.create_action_client_untyped("/fibonacci", "example_interfaces/action/Fibonacci")?;
|
||||||
let action_server_available = node.is_available(&client)?;
|
let action_server_available = r2r::Node::is_available(&client)?;
|
||||||
|
|
||||||
// signal that we are done
|
// signal that we are done
|
||||||
let done = Arc::new(Mutex::new(false));
|
let done = Arc::new(Mutex::new(false));
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let mut node = r2r::Node::create(ctx, "testnode", "")?;
|
let mut node = r2r::Node::create(ctx, "testnode", "")?;
|
||||||
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
|
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
|
||||||
|
|
||||||
let service_available = node.is_available(&client)?;
|
let service_available = r2r::Node::is_available(&client)?;
|
||||||
|
|
||||||
let mut pool = LocalPool::new();
|
let mut pool = LocalPool::new();
|
||||||
let spawner = pool.spawner();
|
let spawner = pool.spawner();
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let mut timer = node.create_wall_timer(std::time::Duration::from_millis(250))?;
|
let mut timer = node.create_wall_timer(std::time::Duration::from_millis(250))?;
|
||||||
let mut timer2 = node.create_wall_timer(std::time::Duration::from_millis(2000))?;
|
let mut timer2 = node.create_wall_timer(std::time::Duration::from_millis(2000))?;
|
||||||
// wait for service to be available
|
// wait for service to be available
|
||||||
let service_available = node.is_available(&client)?;
|
let service_available = r2r::Node::is_available(&client)?;
|
||||||
let mut pool = LocalPool::new();
|
let mut pool = LocalPool::new();
|
||||||
let spawner = pool.spawner();
|
let spawner = pool.spawner();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
use r2r::example_interfaces::srv::AddTwoInts;
|
use r2r::example_interfaces::srv::AddTwoInts;
|
||||||
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
|
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
|
||||||
let mut timer = node.create_wall_timer(duration)?;
|
let mut timer = node.create_wall_timer(duration)?;
|
||||||
let waiting = node.is_available(&client)?;
|
let waiting = r2r::Node::is_available(&client)?;
|
||||||
|
|
||||||
let handle = tokio::task::spawn_blocking(move || loop {
|
let handle = tokio::task::spawn_blocking(move || loop {
|
||||||
node.spin_once(std::time::Duration::from_millis(100));
|
node.spin_once(std::time::Duration::from_millis(100));
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ async fn client(arc_node: Arc<Mutex<r2r::Node>>) -> Result<(), r2r::Error> {
|
||||||
let mut node = arc_node.lock().unwrap();
|
let mut node = arc_node.lock().unwrap();
|
||||||
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
|
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
|
||||||
let timer = node.create_wall_timer(std::time::Duration::from_secs(2))?;
|
let timer = node.create_wall_timer(std::time::Duration::from_secs(2))?;
|
||||||
let service_available = node.is_available(&client)?;
|
let service_available = r2r::Node::is_available(&client)?;
|
||||||
(client, timer, service_available)
|
(client, timer, service_available)
|
||||||
};
|
};
|
||||||
println!("waiting for service...");
|
println!("waiting for service...");
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let client =
|
let client =
|
||||||
node.create_client_untyped("/add_two_ints", "example_interfaces/srv/AddTwoInts")?;
|
node.create_client_untyped("/add_two_ints", "example_interfaces/srv/AddTwoInts")?;
|
||||||
|
|
||||||
let service_available = node.is_available(&client)?;
|
let service_available = r2r::Node::is_available(&client)?;
|
||||||
|
|
||||||
let mut pool = LocalPool::new();
|
let mut pool = LocalPool::new();
|
||||||
let spawner = pool.spawner();
|
let spawner = pool.spawner();
|
||||||
|
|
|
||||||
|
|
@ -707,7 +707,7 @@ impl Node {
|
||||||
/// `spin_once` until available, so spin_once must be called
|
/// `spin_once` until available, so spin_once must be called
|
||||||
/// repeatedly in order to get the wakeup.
|
/// repeatedly in order to get the wakeup.
|
||||||
pub fn is_available(
|
pub fn is_available(
|
||||||
&mut self, client: &dyn IsAvailablePollable,
|
client: &dyn IsAvailablePollable,
|
||||||
) -> Result<impl Future<Output = Result<()>>> {
|
) -> Result<impl Future<Output = Result<()>>> {
|
||||||
let (sender, receiver) = oneshot::channel();
|
let (sender, receiver) = oneshot::channel();
|
||||||
client.register_poll_available(sender)?;
|
client.register_poll_available(sender)?;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue