pub struct Requester<TIn: DdsType, TOut: DdsType> { /* private fields */ }Expand description
Client-Seite eines DDS-RPC-Service.
TIn ist der User-Request-Payload-Typ (z.B. Calculator_AddRequest),
TOut der User-Reply-Payload-Typ. Beide muessen DdsType
implementieren — encodet/decodet wird ueber DdsType::encode und
DdsType::decode.
Implementations§
Source§impl<TIn: DdsType + Send + 'static, TOut: DdsType + Send + 'static> Requester<TIn, TOut>
impl<TIn: DdsType + Send + 'static, TOut: DdsType + Send + 'static> Requester<TIn, TOut>
Sourcepub fn new(
participant: &DomainParticipant,
service_name: &str,
qos: &RpcQos,
) -> RpcResult<Self>
pub fn new( participant: &DomainParticipant, service_name: &str, qos: &RpcQos, ) -> RpcResult<Self>
Legt einen neuen Requester gegen service_name an.
Erzeugt zwei Topics — <service>_Request (Writer) und
<service>_Reply (Reader) — und einen Publisher/Subscriber-
Paerchen. instance_name="" heisst “Default-Instance, kein
PID_SERVICE_INSTANCE_NAME”.
§Errors
RpcError::InvalidServiceNamefalls der Name leer/illegal ist.RpcError::Dcpsbei Topic/Writer/Reader-Anlegen-Fehlern.RpcError::DuplicateInstanceNamefalls auf demselben Participant bereits ein Requester/Replier mit gleichem(service, instance)-Paar laeuft.
Sourcepub fn with_instance(
participant: &DomainParticipant,
service_name: &str,
instance_name: &str,
qos: &RpcQos,
) -> RpcResult<Self>
pub fn with_instance( participant: &DomainParticipant, service_name: &str, instance_name: &str, qos: &RpcQos, ) -> RpcResult<Self>
Sourcepub fn service_name(&self) -> &str
pub fn service_name(&self) -> &str
Service-Name, gegen den dieser Requester arbeitet.
Sourcepub fn instance_name(&self) -> &str
pub fn instance_name(&self) -> &str
Service-Instance-Name ("" falls Default-Instance).
Sourcepub fn pending_count(&self) -> usize
pub fn pending_count(&self) -> usize
Anzahl outstanding Requests.
Sourcepub fn default_timeout(&self) -> Duration
pub fn default_timeout(&self) -> Duration
Aktuelle Default-Timeout-Konfiguration.
Sourcepub fn send_request_async(
&self,
payload: &TIn,
) -> RpcResult<(SampleIdentity, Receiver<ReplyOutcome>)>
pub fn send_request_async( &self, payload: &TIn, ) -> RpcResult<(SampleIdentity, Receiver<ReplyOutcome>)>
Schickt einen Request ohne auf Reply zu warten. Liefert
einen mpsc::Receiver, ueber den der Caller spaeter mit
mpsc::Receiver::recv (oder selbst-getriebener
tick()-Schleife) den Reply abholt.
§Errors
RpcError::Dcps bei Encoder- oder Writer-Fehlern.
Sourcepub fn send_oneway(&self, payload: &TIn) -> RpcResult<SampleIdentity>
pub fn send_oneway(&self, payload: &TIn) -> RpcResult<SampleIdentity>
Sendet einen Oneway-Request — kein Reply erwartet, kein
pending-Slot.
§Errors
RpcError::Dcps bei Encoder- oder Writer-Fehlern.
Sourcepub fn send_request_blocking(
&self,
payload: &TIn,
timeout: Option<Duration>,
) -> RpcResult<TOut>
pub fn send_request_blocking( &self, payload: &TIn, timeout: Option<Duration>, ) -> RpcResult<TOut>
Sendet einen Request und blockiert bis Reply oder Timeout.
timeout=None nutzt RpcQos::request_timeout; explizit ueber
Some(...) ueberschreiben.
§Errors
RpcError::Timeoutwenn waehrendtimeoutkein Reply ankam.RpcError::RemoteException(code)falls Server-Side eineRemoteExceptionCode != Okzurueckgemeldet hat.RpcError::Dcpsbei Encode/Decode/Writer-Fehlern.