/// <summary> /// Creates a new <see cref="DataReader" /> with the desired QoS policies and attaches to it the specified <see cref="DataReaderListener" />. /// </summary> /// <remarks> /// <para>The returned <see cref="DataReader" /> will be attached and belong to the <see cref="Subscriber" />.</para> /// <para>The <see cref="ITopicDescription"/> passed to this operation must have been created from the same <see cref="DomainParticipant" /> that was used to /// create this <see cref="Subscriber" />. If the <see cref="ITopicDescription"/> was created from a different <see cref="DomainParticipant" />, the operation will fail and /// return a <see langword="null"/> result.</para> /// </remarks> /// <param name="topicDescription">The <see cref="ITopicDescription" /> that the <see cref="DataReader" /> will be associated with.</param> /// <param name="qos">The <see cref="DataReaderQos" /> policies to be used for creating the new <see cref="DataReader" />.</param> /// <param name="listener">The <see cref="DataReaderListener" /> to be attached to the newly created <see cref="DataReader" />.</param> /// <param name="statusMask">The <see cref="StatusMask" /> of which status changes the listener should be notified.</param> /// <returns>The newly created <see cref="DataReader" /> on success, otherwise <see langword="null"/>.</returns> public DataReader CreateDataReader(ITopicDescription topicDescription, DataReaderQos qos, DataReaderListener listener, StatusMask statusMask) { if (topicDescription is null) { throw new ArgumentNullException(nameof(topicDescription)); } DataReaderQosWrapper qosWrapper = default; if (qos is null) { qos = new DataReaderQos(); var ret = GetDefaultDataReaderQos(qos); if (ret == ReturnCode.Ok) { qosWrapper = qos.ToNative(); } } else { qosWrapper = qos.ToNative(); } IntPtr nativeListener = IntPtr.Zero; if (listener != null) { nativeListener = listener.ToNative(); } IntPtr td = topicDescription.ToNativeTopicDescription(); IntPtr native = UnsafeNativeMethods.CreateDataReader(_native, td, qosWrapper, nativeListener, statusMask); qos.Release(); if (native.Equals(IntPtr.Zero)) { return(null); } var dr = new DataReader(native) { Listener = listener, }; EntityManager.Instance.Add((dr as Entity).ToNative(), dr); ContainedEntities.Add(dr); return(dr); }
/// <summary> /// Sets a default value of the <see cref="DataReader" /> QoS policies which will be used for newly created <see cref="DataReader" /> entities /// in the case where the QoS policies are defaulted in the CreateDataReader operation. /// </summary> /// <remarks> /// This operation will check that the resulting policies are self consistent; if they are not, the operation will have no effect and /// return <see cref="ReturnCode.InconsistentPolicy" />. /// </remarks> /// <param name="qos">The default <see cref="DataReaderQos" /> to be set.</param> /// <returns>The <see cref="ReturnCode" /> that indicates the operation result.</returns> public ReturnCode SetDefaultDataReaderQos(DataReaderQos qos) { if (qos is null) { return(ReturnCode.BadParameter); } var qosNative = qos.ToNative(); var ret = UnsafeNativeMethods.SetDefaultDataReaderQos(_native, qosNative); qos.Release(); return(ret); }
/// <summary> /// Gets the <see cref="DataReader" /> QoS policies. /// </summary> /// <param name="qos">The <see cref="DataReaderQos" /> to be filled up.</param> /// <returns>The <see cref="ReturnCode" /> that indicates the operation result.</returns> public ReturnCode GetQos(DataReaderQos qos) { if (qos == null) { return(ReturnCode.BadParameter); } DataReaderQosWrapper qosWrapper = default; var ret = UnsafeNativeMethods.GetQos(_native, ref qosWrapper); if (ret == ReturnCode.Ok) { qos.FromNative(qosWrapper); } qos.Release(); return(ret); }
/// <summary> /// Creates a new <see cref="DataReader" /> with the desired QoS policies and without listener attached. /// </summary> /// <remarks> /// <para>The returned <see cref="DataReader" /> will be attached and belong to the <see cref="Subscriber" />.</para> /// <para>The <see cref="ITopicDescription"/> passed to this operation must have been created from the same <see cref="DomainParticipant" /> that was used to /// create this <see cref="Subscriber" />. If the <see cref="ITopicDescription"/> was created from a different <see cref="DomainParticipant" />, the operation will fail and /// return a <see langword="null"/> result.</para> /// </remarks> /// <param name="topicDescription">The <see cref="ITopicDescription" /> that the <see cref="DataReader" /> will be associated with.</param> /// <param name="qos">The <see cref="DataReaderQos" /> policies to be used for creating the new <see cref="DataReader" />.</param> /// <returns>The newly created <see cref="DataReader" /> on success, otherwise <see langword="null"/>.</returns> public DataReader CreateDataReader(ITopicDescription topicDescription, DataReaderQos qos) { return(CreateDataReader(topicDescription, qos, null, StatusMask.DefaultStatusMask)); }
/// <summary> /// Creates a new <see cref="DataReader" /> with the desired QoS policies and attaches to it the specified <see cref="DataReaderListener" />. /// The specified <see cref="DataReaderListener" /> will be attached with the default <see cref="StatusMask" />. /// </summary> /// <param name="topicDescription">The <see cref="ITopicDescription" /> that the <see cref="DataReader" /> will be associated with.</param> /// <param name="qos">The <see cref="DataReaderQos" /> policies to be used for creating the new <see cref="DataReader" />.</param> /// <param name="listener">The <see cref="DataReaderListener" /> to be attached to the newly created <see cref="DataReader" />.</param> /// <returns>The newly created <see cref="DataReader" /> on success, otherwise <see langword="null"/>.</returns> public DataReader CreateDataReader(ITopicDescription topicDescription, DataReaderQos qos, DataReaderListener listener) { return(CreateDataReader(topicDescription, qos, listener, StatusMask.DefaultStatusMask)); }