private void startMessageWrite(bool immediate_write) { MessageAndSerializerFunc holder = null; if (writing_message || !header_written) { return; } lock (outbox) { if (outbox.Count > 0) { writing_message = true; holder = outbox.Dequeue(); } if (outbox.Count < max_queue) { queue_full = false; } } if (holder != null) { if (holder.msg.Serialized == null) { holder.msg.Serialized = holder.serfunc(); } stats.messages_sent++; //EDB.WriteLine("Message backlog = " + (triedtosend - stats.messages_sent)); stats.bytes_sent += holder.msg.Serialized.Length; stats.message_data_sent += holder.msg.Serialized.Length; connection.write(holder.msg.Serialized, holder.msg.Serialized.Length, onMessageWritten, immediate_write); } }
internal void publish(MessageAndSerializerFunc msg) { lock (publish_queue_mutex) { publish_queue.Enqueue(msg); } }
internal override void enqueueMessage(MessageAndSerializerFunc holder) { lock (drop_mutex) { if (dropped) return; } if (subscriber != null) subscriber.handleMessage(holder.msg, holder.serialize, holder.nocopy); }
internal bool EnqueueMessage(MessageAndSerializerFunc holder) { lock (subscriber_links_mutex) { if (Dropped) { return(false); } } uint seq = incrementSequence(); if (HasHeader) { object h = holder.msg.GetType().GetField("header").GetValue(holder.msg); m.Header header; if (h == null) { header = new m.Header(); } else { header = (m.Header)h; } header.seq = seq; if (header.stamp == null) { header.stamp = ROS.GetTime(); } if (header.frame_id == null) { header.frame_id = ""; } holder.msg.GetType().GetField("header").SetValue(holder.msg, header); } holder.msg.connection_header = connection_header.Values; lock (subscriber_links_mutex) foreach (SubscriberLink sub_link in subscriber_links) { sub_link.enqueueMessage(holder); } if (Latch) { last_message = new MessageAndSerializerFunc(holder.msg, holder.serfunc, false, true); } return(true); }
internal override void enqueueMessage(MessageAndSerializerFunc holder) { lock (drop_mutex) { if (dropped) { return; } } if (subscriber != null) { subscriber.handleMessage(holder.msg, holder.serialize, holder.nocopy); } }
internal override void enqueueMessage(MessageAndSerializerFunc holder) { lock (outbox) { if (max_queue > 0 && outbox.Count >= max_queue) { outbox.Dequeue(); queue_full = true; } else { queue_full = false; } outbox.Enqueue(holder); } startMessageWrite(false); }
internal virtual void enqueueMessage(MessageAndSerializerFunc holder) { throw new NotImplementedException(); }
internal bool EnqueueMessage(MessageAndSerializerFunc holder) { lock (subscriber_links_mutex) { if (Dropped) return false; } uint seq = incrementSequence(); if (HasHeader) { object h = holder.msg.GetType().GetField("header").GetValue(holder.msg); m.Header header; if (h == null) header = new m.Header(); else header = (m.Header) h; header.seq = seq; if (header.stamp == null) { header.stamp = ROS.GetTime(); } if (header.frame_id == null) { header.frame_id = ""; } holder.msg.GetType().GetField("header").SetValue(holder.msg, header); } holder.msg.connection_header = connection_header.Values; lock (subscriber_links_mutex) foreach (SubscriberLink sub_link in subscriber_links) { sub_link.enqueueMessage(holder); } if (Latch) { last_message = new MessageAndSerializerFunc(holder.msg, holder.serfunc, false, true); } return true; }
internal override void enqueueMessage(MessageAndSerializerFunc holder) { lock (outbox) { if (max_queue > 0 && outbox.Count >= max_queue) { outbox.Dequeue(); queue_full = true; } else queue_full = false; outbox.Enqueue(holder); } startMessageWrite(false); }