コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: Publication.cs プロジェクト: polytronicgr/ROS.NET
 internal void publish(MessageAndSerializerFunc msg)
 {
     lock (publish_queue_mutex)
     {
         publish_queue.Enqueue(msg);
     }
 }
コード例 #3
0
        internal override void enqueueMessage(MessageAndSerializerFunc holder)
        {
            lock (drop_mutex)
            {
                if (dropped) return;
            }

            if (subscriber != null)
                subscriber.handleMessage(holder.msg, holder.serialize, holder.nocopy);
        }
コード例 #4
0
ファイル: Publication.cs プロジェクト: polytronicgr/ROS.NET
        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);
        }
コード例 #5
0
        internal override void enqueueMessage(MessageAndSerializerFunc holder)
        {
            lock (drop_mutex)
            {
                if (dropped)
                {
                    return;
                }
            }

            if (subscriber != null)
            {
                subscriber.handleMessage(holder.msg, holder.serialize, holder.nocopy);
            }
        }
コード例 #6
0
 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);
 }
コード例 #7
0
 internal virtual void enqueueMessage(MessageAndSerializerFunc holder)
 {
     throw new NotImplementedException();
 }
コード例 #8
0
ファイル: Publication.cs プロジェクト: uml-robotics/ROS.NET
        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;
        }
コード例 #9
0
ファイル: Publication.cs プロジェクト: uml-robotics/ROS.NET
 internal void publish(MessageAndSerializerFunc msg)
 {
     lock (publish_queue_mutex)
     {
         publish_queue.Enqueue(msg);
     }
 }
コード例 #10
0
 internal virtual void enqueueMessage(MessageAndSerializerFunc holder)
 {
     throw new NotImplementedException();
 }
コード例 #11
0
 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);
 }