Exemplo n.º 1
0
 internal void Publish(MessageAndSerializerFunc msg)
 {
     lock (gate)
     {
         publishQueue.TryOnNext(msg);
     }
 }
Exemplo n.º 2
0
 internal void publish(MessageAndSerializerFunc msg)
 {
     lock ( publish_queue_mutex )
     {
         publish_queue.Enqueue(msg);
     }
 }
Exemplo n.º 3
0
 public override void EnqueueMessage(MessageAndSerializerFunc holder)
 {
     if (!outbox.TryOnNext(holder))
     {
         // TODO: handle queue full case
     }
 }
Exemplo n.º 4
0
        internal bool EnqueueMessage(MessageAndSerializerFunc holder)
        {
            lock (gate)
            {
                if (Dropped)
                {
                    return(false);
                }
            }

            uint seq = IncrementSequence();

            if (HasHeader)
            {
                object h = holder.msg.GetType().GetTypeInfo().GetField("header").GetValue(holder.msg);

                std_msgs.Header header;
                if (h == null)
                {
                    header = new std_msgs.Header();
                }
                else
                {
                    header = (std_msgs.Header)h;
                }

                header.seq = seq;
                if (header.stamp == null)
                {
                    header.stamp = ROS.GetTime();
                }
                if (header.frame_id == null)
                {
                    header.frame_id = "";
                }
                holder.msg.GetType().GetTypeInfo().GetField("header").SetValue(holder.msg, header);
            }
            holder.msg.connection_header = connectionHeader.Values;

            lock (gate)
            {
                foreach (SubscriberLink link in subscriberLinks)
                {
                    link.EnqueueMessage(holder);
                }
            }

            if (Latch)
            {
                lastMessage = new MessageAndSerializerFunc(holder.msg, holder.serfunc, false, true);
            }

            return(true);
        }
Exemplo n.º 5
0
        public override void EnqueueMessage(MessageAndSerializerFunc holder)
        {
            lock (gate)
            {
                if (dropped)
                {
                    return;
                }
            }

            if (subscriber != null)
            {
                subscriber.HandleMessage(holder.msg, holder.serialize, holder.nocopy);
            }
        }
Exemplo n.º 6
0
        private async Task WriteMessage(MessageAndSerializerFunc message)
        {
            if (message.msg.Serialized == null)
            {
                message.msg.Serialized = message.serfunc();
            }

            int length = message.msg.Serialized.Length;
            await connection.WriteBlock(BitConverter.GetBytes(length), 0, 4, cancel).ConfigureAwait(false);

            await connection.WriteBlock(message.msg.Serialized, 0, length, cancel).ConfigureAwait(false);

            Stats.MessagesSent++;
            Stats.BytesSent       += length + 4;
            Stats.MessageDataSent += length;
        }
Exemplo n.º 7
0
 internal override void EnqueueMessage(MessageAndSerializerFunc holder)
 {
     lock ( outbox )
     {
         if (maxQueue > 0 && outbox.Count >= maxQueue)
         {
             outbox.Dequeue();
             queueFull = true;
         }
         else
         {
             queueFull = false;
         }
         outbox.Enqueue(holder);
     }
     StartMessageWrite(false);
 }
Exemplo n.º 8
0
        private void StartMessageWrite(bool immediateWrite)
        {
            MessageAndSerializerFunc holder = null;

            if (writingMessage || !headerWritten)
            {
                return;
            }

            lock ( outbox )
            {
                if (outbox.Count > 0)
                {
                    writingMessage = true;
                    holder         = outbox.Dequeue();
                }
                if (outbox.Count < maxQueue)
                {
                    queueFull = false;
                }
            }

            if (holder != null)
            {
                if (holder.msg.Serialized == null)
                {
                    holder.msg.Serialized = holder.serfunc();
                }
                byte[] outbuf = new byte[holder.msg.Serialized.Length + 4];
                Array.Copy(holder.msg.Serialized, 0, outbuf, 4, holder.msg.Serialized.Length);
                Array.Copy(BitConverter.GetBytes(holder.msg.Serialized.Length), outbuf, 4);
                stats.messagesSent++;
                //ROS.Debug()("Message backlog = " + (triedtosend - stats.messages_sent));
                stats.bytesSent       += outbuf.Length;
                stats.messageDataSent += outbuf.Length;
                connection.write(outbuf, outbuf.Length, OnMessageWritten, immediateWrite);
            }
        }
Exemplo n.º 9
0
 internal virtual void EnqueueMessage(MessageAndSerializerFunc holder)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 10
0
 public override void EnqueueMessage(MessageAndSerializerFunc holder)
 {
     outbox.TryOnNext(holder); // queue will drop oldest messages when full
 }
Exemplo n.º 11
0
 public abstract void EnqueueMessage(MessageAndSerializerFunc holder);