public override void on_requested_deadline_missed( DDS.DataReader reader, ref DDS.RequestedDeadlineMissedStatus status) { deadline_contentfilterDataReader deadline_contentfilter_reader = (deadline_contentfilterDataReader)reader; // Get the date and time for the current moment, adjusted // to the local time zone. DateTime currentTime = DateTime.Now; TimeSpan span = currentTime.Subtract(initTime); deadline_contentfilter dummy = new deadline_contentfilter(); try { deadline_contentfilter_reader.get_key_value( dummy, ref status.last_instance_handle); } catch (DDS.Exception e) { Console.WriteLine("get_key_value error {0}\n", e); return; } // Display the value and Kind property of the current moment Console.WriteLine("Missed deadline @ t={0}.{1}s on instance code = {2}\n", span.Seconds, span.Milliseconds, dummy.code); }
public override void on_offered_deadline_missed( DDS.DataWriter writer, ref DDS.OfferedDeadlineMissedStatus status) { deadline_contentfilter dummy = new deadline_contentfilter(); try { // get key of passed in writer ((deadline_contentfilterDataWriter)writer).get_key_value( dummy, ref status.last_instance_handle); } catch (DDS.Exception e) { Console.WriteLine("get_key_value error {0}\n", e); return; } Console.WriteLine("Offered deadline missed on instance code {0}", dummy.code); }
static void publish(int domain_id, int sample_count) { // --- Create participant --- // /* To customize participant QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.DomainParticipant participant = DDS.DomainParticipantFactory.get_instance().create_participant( domain_id, DDS.DomainParticipantFactory.PARTICIPANT_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (participant == null) { shutdown(participant); throw new ApplicationException("create_participant error"); } // --- Create publisher --- // /* To customize publisher QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Publisher publisher = participant.create_publisher( DDS.DomainParticipant.PUBLISHER_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (publisher == null) { shutdown(participant); throw new ApplicationException("create_publisher error"); } // --- Create topic --- // /* Register type before creating topic */ System.String type_name = deadline_contentfilterTypeSupport.get_type_name(); try { deadline_contentfilterTypeSupport.register_type( participant, type_name); } catch (DDS.Exception e) { Console.WriteLine("register_type error {0}", e); shutdown(participant); throw e; } /* To customize topic QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Topic topic = participant.create_topic( "Example deadline_contentfilter", type_name, DDS.DomainParticipant.TOPIC_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (topic == null) { shutdown(participant); throw new ApplicationException("create_topic error"); } // --- Create writer --- // //// Start changes for Deadline // Create listener deadlineListener writer_listener = new deadlineListener(); if (writer_listener == null) { shutdown(participant); throw new ApplicationException("listener instantiation error\n"); } /* To customize data writer QoS, use * the configuration file NDDS_QOS_PROFILES.xml */ DDS.DataWriter writer = publisher.create_datawriter( topic, DDS.Publisher.DATAWRITER_QOS_DEFAULT, writer_listener, /* listener */ DDS.StatusMask.STATUS_MASK_ALL); if (writer == null) { shutdown(participant); throw new ApplicationException("create_datawriter error"); } /* If you want to change the DataWriter's QoS programmatically rather than * using the XML file, you will need to add the following lines to your * code and comment out the create_datawriter call above. * * In this case, we set the deadline period to 2 seconds to trigger * a deadline if the DataWriter does not update often enough. */ /* * * DDS.DataWriterQos datawriter_qos = new DDS.DataWriterQos(); * try { * publisher.get_default_datawriter_qos(datawriter_qos); * } * catch(DDS.Exception e) { * Console.WriteLine("get_default_datawriter_qos error\n", e); * } * * // Set deadline QoS to 1.5 sec * datawriter_qos.deadline.period.sec = 1; * datawriter_qos.deadline.period.nanosec = 500000000; // 500ms * * // --- Create writer --- // * * DDS.DataWriter writer = publisher.create_datawriter( * topic, * datawriter_qos, //DDS.Publisher.DATAWRITER_QOS_DEFAULT, * writer_listener, * DDS.StatusMask.STATUS_MASK_ALL); * if (writer == null) { * shutdown(participant); * throw new ApplicationException("create_datawriter error"); * } */ deadline_contentfilterDataWriter deadline_contentfilter_writer = (deadline_contentfilterDataWriter)writer; /* Create data sample for writing */ deadline_contentfilter instance0 = deadline_contentfilterTypeSupport.create_data(); if (instance0 == null) { shutdown(participant); throw new ApplicationException( "deadline_contentfilterTypeSupport.create_data error"); } deadline_contentfilter instance1 = deadline_contentfilterTypeSupport.create_data(); if (instance1 == null) { shutdown(participant); throw new ApplicationException( "deadline_contentfilterTypeSupport.create_data error"); } // Set keys -- we specify 'code' as the key field in the .idl instance0.code = 0; instance1.code = 1; /* For a data type that has a key, if the same instance is going to be * written multiple times, initialize the key here * and register the keyed instance prior to writing */ DDS.InstanceHandle_t instance_handle0 = DDS.InstanceHandle_t.HANDLE_NIL; DDS.InstanceHandle_t instance_handle1 = DDS.InstanceHandle_t.HANDLE_NIL; instance_handle0 = deadline_contentfilter_writer.register_instance(instance0); instance_handle1 = deadline_contentfilter_writer.register_instance(instance1); const System.Int32 send_period = 1000; // milliseconds instance0.x = instance0.y = instance1.x = instance1.y = 0; int writeTimes = 15; /* Main loop */ for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { //Console.WriteLine("Writing deadline, count {0}", count); /* Modify the data to be sent here */ instance0.x++; instance0.y++; instance1.x++; instance1.y++; Console.WriteLine("Writing instance0, x = {0}, y = {1}\n", instance0.x, instance0.y); try { deadline_contentfilter_writer.write(instance0, ref instance_handle0); } catch (DDS.Exception e) { Console.WriteLine("write error {0}", e); } if (count < writeTimes) { Console.WriteLine("Writing instance1, x = {0}, y = {1}\n", instance1.x, instance1.y); try { deadline_contentfilter_writer.write(instance1, ref instance_handle1); } catch (DDS.Exception e) { Console.WriteLine("write error {0}", e); } } else if (count == writeTimes) { Console.WriteLine("Stopping writes to instance1\n"); } System.Threading.Thread.Sleep(send_period); } // Unregister the instances try { deadline_contentfilter_writer.unregister_instance(instance0, ref instance_handle0); } catch (DDS.Exception e) { Console.WriteLine("unregister instance error: {0}", e); } try { deadline_contentfilter_writer.unregister_instance(instance1, ref instance_handle1); } catch (DDS.Exception e) { Console.WriteLine("unregister instance error: {0}", e); } // --- Shutdown --- // /* Delete data sample */ try { deadline_contentfilterTypeSupport.delete_data(instance0); } catch (DDS.Exception e) { Console.WriteLine("deadlineTypeSupport.delete_data error: {0}", e); } try { deadline_contentfilterTypeSupport.delete_data(instance1); } catch (DDS.Exception e) { Console.WriteLine("deadlineTypeSupport.delete_data error: {0}", e); } /* Delete all entities */ shutdown(participant); }