pub struct CffiSession { /* private fields */ }Expand description
Session backed by a C vtable.
Implementations§
Source§impl CffiSession
impl CffiSession
Sourcepub fn open(
locator: &str,
mode: u8,
domain_id: u32,
node_name: &str,
) -> Result<Self, TransportError>
pub fn open( locator: &str, mode: u8, domain_id: u32, node_name: &str, ) -> Result<Self, TransportError>
Open a new session via the default registered vtable (first entry in the registry — the RMW_IMPLEMENTATION-style fast path for single-backend builds).
For explicit backend selection in multi-backend (bridge)
binaries, use open_named.
Sourcepub fn open_named(
rmw_name: &str,
locator: &str,
mode: u8,
domain_id: u32,
node_name: &str,
) -> Result<Self, TransportError>
pub fn open_named( rmw_name: &str, locator: &str, mode: u8, domain_id: u32, node_name: &str, ) -> Result<Self, TransportError>
Phase 104.C.1 — open a new session against a named backend.
Resolves rmw_name against the registry (Phase 104.B.2),
returns Err(TransportError::InvalidArgument) if no backend
is registered under that name.
Trait Implementations§
Source§impl Drop for CffiSession
impl Drop for CffiSession
Source§impl Session for CffiSession
impl Session for CffiSession
Source§fn supported_qos_policies(&self) -> QosPolicyMask
fn supported_qos_policies(&self) -> QosPolicyMask
Phase 115.K.2.5.1.2 — declare a permissive QoS-policy mask
here so backends behind the cffi vtable don’t get rejected by
the runtime’s pre-validate step before they ever see the
create_publisher / create_subscriber call. The vtable
doesn’t expose a per-backend policy mask yet; until it does,
the cffi route has to assume the registered backend supports
the union of every policy any nros-supported RMW honours.
Backends that don’t support a policy MUST surface
NROS_RMW_RET_INCOMPATIBLE_QOS from create_publisher etc.
to keep the no-silent-degradation contract.
TODO 115.K.2.x: extend nros_rmw_vtable_t with a
supported_qos_policies() callback so the runtime queries
the backend instead of guessing.
Source§type Error = TransportError
type Error = TransportError
Source§type PublisherHandle = CffiPublisher
type PublisherHandle = CffiPublisher
Source§type SubscriberHandle = CffiSubscriber
type SubscriberHandle = CffiSubscriber
Source§type ServiceServerHandle = CffiServiceServer
type ServiceServerHandle = CffiServiceServer
Source§type ServiceClientHandle = CffiServiceClient
type ServiceClientHandle = CffiServiceClient
Source§fn create_publisher(
&mut self,
topic: &TopicInfo<'_>,
qos: QosSettings,
) -> Result<CffiPublisher, TransportError>
fn create_publisher( &mut self, topic: &TopicInfo<'_>, qos: QosSettings, ) -> Result<CffiPublisher, TransportError>
Source§fn create_subscriber(
&mut self,
topic: &TopicInfo<'_>,
qos: QosSettings,
) -> Result<CffiSubscriber, TransportError>
fn create_subscriber( &mut self, topic: &TopicInfo<'_>, qos: QosSettings, ) -> Result<CffiSubscriber, TransportError>
Source§fn create_service_server(
&mut self,
service: &ServiceInfo<'_>,
qos: QosSettings,
) -> Result<CffiServiceServer, TransportError>
fn create_service_server( &mut self, service: &ServiceInfo<'_>, qos: QosSettings, ) -> Result<CffiServiceServer, TransportError>
ServiceServerTrait::try_recv_request. Read moreSource§fn create_service_client(
&mut self,
service: &ServiceInfo<'_>,
qos: QosSettings,
) -> Result<CffiServiceClient, TransportError>
fn create_service_client( &mut self, service: &ServiceInfo<'_>, qos: QosSettings, ) -> Result<CffiServiceClient, TransportError>
Source§fn close(&mut self) -> Result<(), TransportError>
fn close(&mut self) -> Result<(), TransportError>
Source§fn drive_io(&mut self, timeout_ms: i32) -> Result<(), TransportError>
fn drive_io(&mut self, timeout_ms: i32) -> Result<(), TransportError>
Source§fn next_deadline_ms(&self) -> Option<u32>
fn next_deadline_ms(&self) -> Option<u32>
Source§unsafe fn set_wake_callback(
&mut self,
cb: Option<unsafe extern "C" fn(ctx: *mut c_void)>,
ctx: *mut c_void,
)
unsafe fn set_wake_callback( &mut self, cb: Option<unsafe extern "C" fn(ctx: *mut c_void)>, ctx: *mut c_void, )
cb.is_none()) the
executor wake callback. The runtime calls this once per
session after open with cb pointing at a runtime-owned
function and ctx pointing at the executor’s wake state.
The backend stores (cb, ctx) in its per-session state and
calls cb(ctx) whenever its transport notification path
fires (datagram arrival, condvar wake, etc.) — the runtime
cb does flag-write + condvar-signal atomically, so a
spin_once blocked on the wake condvar resumes immediately
instead of waiting for the next poll iteration. Read moreSource§fn supports_wake_callback(&self) -> bool
fn supports_wake_callback(&self) -> bool
set_wake_callback? Read more