public static bool WaitForSubscriptions(DataWriter writer, int subscriptionsCount, int milliseconds) { if (writer is null) { throw new ArgumentNullException(nameof(writer)); } PublicationMatchedStatus status = default; writer.GetPublicationMatchedStatus(ref status); int count = milliseconds / 100; while (status.CurrentCount != subscriptionsCount && count > 0) { Thread.Sleep(100); writer.GetPublicationMatchedStatus(ref status); count--; } if (count == 0 && status.CurrentCount != subscriptionsCount) { return(false); } return(true); }
public void TestGetPublicationMatchedStatus() { // Initialize entities DataWriterQos qos = new DataWriterQos(); qos.Reliability.Kind = ReliabilityQosPolicyKind.BestEffortReliabilityQos; DataWriter writer = _publisher.CreateDataWriter(_topic, qos); Assert.IsNotNull(writer); // If not datareaders are created should return the default status PublicationMatchedStatus status = default; ReturnCode result = writer.GetPublicationMatchedStatus(ref status); Assert.AreEqual(ReturnCode.Ok, result); Assert.AreEqual(0, status.CurrentCount); Assert.AreEqual(0, status.CurrentCountChange); Assert.AreEqual(0, status.TotalCount); Assert.AreEqual(0, status.TotalCountChange); Assert.AreEqual(InstanceHandle.HandleNil, status.LastSubscriptionHandle); // Create a not compatible reader Subscriber subscriber = _participant.CreateSubscriber(); Assert.IsNotNull(subscriber); DataReaderQos drQos = new DataReaderQos(); drQos.Reliability.Kind = ReliabilityQosPolicyKind.ReliableReliabilityQos; DataReader reader = subscriber.CreateDataReader(_topic, drQos); Assert.IsNotNull(reader); // Wait for discovery and check the status System.Threading.Thread.Sleep(100); result = writer.GetPublicationMatchedStatus(ref status); Assert.AreEqual(ReturnCode.Ok, result); Assert.AreEqual(0, status.CurrentCount); Assert.AreEqual(0, status.CurrentCountChange); Assert.AreEqual(0, status.TotalCount); Assert.AreEqual(0, status.TotalCountChange); Assert.AreEqual(InstanceHandle.HandleNil, status.LastSubscriptionHandle); // Create a compatible reader DataReader otherReader = subscriber.CreateDataReader(_topic); Assert.IsNotNull(otherReader); // Wait for discovery and check the status System.Threading.Thread.Sleep(100); result = writer.GetPublicationMatchedStatus(ref status); Assert.AreEqual(ReturnCode.Ok, result); Assert.AreEqual(1, status.CurrentCount); Assert.AreEqual(1, status.CurrentCountChange); Assert.AreEqual(1, status.TotalCount); Assert.AreEqual(1, status.TotalCountChange); Assert.AreEqual(otherReader.InstanceHandle, status.LastSubscriptionHandle); }
public ReturnCode GetPublicationMatchedStatus( ref PublicationMatchedStatus status) { ReturnCode result; ReportStack.Start(); if (this.rlReq_isAlive) { if (status == null) { status = new PublicationMatchedStatus(); } GCHandle statusGCHandle = GCHandle.Alloc(status, GCHandleType.Normal); result = uResultToReturnCode( User.Writer.GetPublicationMatchStatus( rlReq_UserPeer, 1, PublicationMatchedStatusMarshaler.CopyOut, GCHandle.ToIntPtr(statusGCHandle))); status = statusGCHandle.Target as PublicationMatchedStatus; statusGCHandle.Free(); } else { result = DDS.ReturnCode.AlreadyDeleted; } ReportStack.Flush(this, result != ReturnCode.Ok); return(result); }
private void PrivatePublicationMatched(IntPtr entityData, IntPtr writerPtr, PublicationMatchedStatus status) { if (listener != null) { IDataWriter dataWriter = (IDataWriter)OpenSplice.SacsSuperClass.fromUserData(writerPtr); listener.OnPublicationMatched(dataWriter, status); } }
public ReturnCode GetPublicationMatchedStatus( ref PublicationMatchedStatus status) { if (status == null) { status = new PublicationMatchedStatus(); } return(Gapi.DataWriter.get_publication_matched_status(GapiPeer, status)); }
internal static V_RESULT CopyOut(ref v_topicMatchInfo from, PublicationMatchedStatus to) { to.TotalCount = from.totalCount; to.TotalCountChange = from.totalChanged; to.CurrentCount = from.currentCount; to.CurrentCountChange = from.currentChanged; to.LastSubscriptionHandle = User.InstanceHandle.FromGID(from.instanceHandle); return(V_RESULT.OK); }
/*! This event is raised when the DataWriter discovered a matching DataReader */ public void OnPublicationMatchedHendler(DataWriter dataWriter, PublicationMatchedStatus status) { if (status.CurrentCountChange > 0) { Console.WriteLine("in DataWriter: " + dataWriter.Name + " " + status.CurrentCountChange + " Publication matched"); } else { Console.WriteLine("in DataWriter: " + dataWriter.Name + " " + status.CurrentCountChange + " DataReader lost"); } }
internal static V_RESULT CopyOut(IntPtr fromPtr, IntPtr toPtr) { v_topicMatchInfo from = (v_topicMatchInfo)Marshal.PtrToStructure(fromPtr, type); GCHandle toGCHandle = GCHandle.FromIntPtr(toPtr); PublicationMatchedStatus to = toGCHandle.Target as PublicationMatchedStatus; V_RESULT result = CopyOut(ref from, to); toGCHandle.Target = to; return(result); }
public static bool WaitForSubscriptions(this DataWriter writer, int subscriptionsCount, int milliseconds) { PublicationMatchedStatus status = new PublicationMatchedStatus(); writer.GetPublicationMatchedStatus(ref status); int count = milliseconds / 100; while (status.CurrentCount != subscriptionsCount && count > 0) { System.Threading.Thread.Sleep(100); writer.GetPublicationMatchedStatus(ref status); count--; } if (count == 0 && status.CurrentCount != subscriptionsCount) { return(false); } return(true); }
public override void OnPublicationMatched(DataWriter writer, PublicationMatchedStatus status) { PublicationMatched?.Invoke(writer, status); }
public static extern ReturnCode get_publication_matched_status( IntPtr _this, PublicationMatchedStatus status );
static void Main(string[] args) { Ace.Init(); DomainParticipantFactory dpf = ParticipantService.Instance.GetDomainParticipantFactory("-DCPSConfigFile", "rtps.ini"); DomainParticipant participant = dpf.CreateParticipant(42); if (participant == null) { throw new Exception("Could not create the participant"); } MessageTypeSupport support = new MessageTypeSupport(); ReturnCode result = support.RegisterType(participant, support.GetTypeName()); if (result != ReturnCode.Ok) { throw new Exception("Could not register type: " + result.ToString()); } Topic topic = participant.CreateTopic("MessageTopic", support.GetTypeName()); if (topic == null) { throw new Exception("Could not create the message topic"); } Publisher publisher = participant.CreatePublisher(); if (publisher == null) { throw new Exception("Could not create the publisher"); } DataWriter writer = publisher.CreateDataWriter(topic); if (writer == null) { throw new Exception("Could not create the data writer"); } MessageDataWriter messageWriter = new MessageDataWriter(writer); Console.WriteLine("Waiting for a subscriber..."); PublicationMatchedStatus status = new PublicationMatchedStatus(); do { result = messageWriter.GetPublicationMatchedStatus(ref status); System.Threading.Thread.Sleep(500); }while (status.CurrentCount < 1); Console.WriteLine("Subscriber found, writting data...."); messageWriter.Write(new Message { Content = "Hello, I love you, won't you tell me your name?" }); Console.WriteLine("Press a key to exit..."); Console.ReadKey(); participant.DeleteContainedEntities(); dpf.DeleteParticipant(participant); ParticipantService.Instance.Shutdown(); Ace.Fini(); }