|
1 | 1 | use crate::{
|
2 |
| - error::ToResult, rcl_bindings::*, Clock, NodeHandle, RclrsError, ENTITY_LIFECYCLE_MUTEX, |
| 2 | + action::{GoalResponse, GoalUuid, CancelResponse, ServerGoalHandle}, error::ToResult, rcl_bindings::*, Clock, NodeHandle, RclrsError, ENTITY_LIFECYCLE_MUTEX, |
3 | 3 | };
|
4 | 4 | use std::{
|
5 | 5 | ffi::CString,
|
6 |
| - marker::PhantomData, |
7 | 6 | sync::{atomic::AtomicBool, Arc, Mutex, MutexGuard},
|
8 | 7 | };
|
9 | 8 |
|
@@ -51,15 +50,18 @@ pub trait ActionServerBase: Send + Sync {
|
51 | 50 | // fn execute(&self) -> Result<(), RclrsError>;
|
52 | 51 | }
|
53 | 52 |
|
54 |
| -pub struct ActionServer<T> |
| 53 | +pub type GoalCallback<ActionT> = dyn Fn(GoalUuid, <ActionT as rosidl_runtime_rs::Action>::Goal) -> GoalResponse + 'static + Send + Sync; |
| 54 | +pub type CancelCallback<ActionT> = dyn Fn(ServerGoalHandle<ActionT>) -> CancelResponse + 'static + Send + Sync; |
| 55 | +pub type AcceptedCallback<ActionT> = dyn Fn(ServerGoalHandle<ActionT>) + 'static + Send + Sync; |
| 56 | + |
| 57 | +pub struct ActionServer<ActionT> |
55 | 58 | where
|
56 |
| - T: rosidl_runtime_rs::Action, |
| 59 | + ActionT: rosidl_runtime_rs::Action, |
57 | 60 | {
|
58 |
| - _marker: PhantomData<fn() -> T>, |
59 | 61 | pub(crate) handle: Arc<ActionServerHandle>,
|
60 |
| - // goal_callback: (), |
61 |
| - // cancel_callback: (), |
62 |
| - // accepted_callback: (), |
| 62 | + goal_callback: Box<GoalCallback<ActionT>>, |
| 63 | + cancel_callback: Box<CancelCallback<ActionT>>, |
| 64 | + accepted_callback: Box<AcceptedCallback<ActionT>>, |
63 | 65 | }
|
64 | 66 |
|
65 | 67 | impl<T> ActionServer<T>
|
|
71 | 73 | node_handle: Arc<NodeHandle>,
|
72 | 74 | clock: Clock,
|
73 | 75 | topic: &str,
|
| 76 | + goal_callback: impl Fn(GoalUuid, T::Goal) -> GoalResponse + 'static + Send + Sync, |
| 77 | + cancel_callback: impl Fn(ServerGoalHandle<T>) -> CancelResponse + 'static + Send + Sync, |
| 78 | + accepted_callback: impl Fn(ServerGoalHandle<T>) + 'static + Send + Sync, |
74 | 79 | ) -> Result<Self, RclrsError>
|
75 | 80 | where
|
76 | 81 | T: rosidl_runtime_rs::Action,
|
@@ -119,8 +124,10 @@ where
|
119 | 124 | });
|
120 | 125 |
|
121 | 126 | Ok(Self {
|
122 |
| - _marker: Default::default(), |
123 | 127 | handle,
|
| 128 | + goal_callback: Box::new(goal_callback), |
| 129 | + cancel_callback: Box::new(cancel_callback), |
| 130 | + accepted_callback: Box::new(accepted_callback), |
124 | 131 | })
|
125 | 132 | }
|
126 | 133 | }
|
|
0 commit comments