Beispiel #1
0
        public override void pushitgood(ISubscriptionCallbackHelper helper, IRosMessage message, bool nonconst_need_copy, ref bool was_full, TimeData receipt_time)
        {
            if (was_full)
            {
                was_full = false;
            }
            if (fullNoLock())
            {
                Item toss;
                queue.TryDequeue(out toss);

                _full    = true;
                was_full = true;
            }
            else
            {
                _full = false;
            }

            Item i = new Item
            {
                helper             = helper,
                message            = message,
                nonconst_need_copy = nonconst_need_copy,
                receipt_time       = receipt_time
            };

            queue.Enqueue(i);
        }
Beispiel #2
0
 /// <summary>
 ///     Creates a ROS Subscriber
 /// </summary>
 /// <param name="topic">Topic name to subscribe to</param>
 /// <param name="nodeHandle">nodehandle</param>
 /// <param name="cb">callback function to be fired when message is received</param>
 public Subscriber(string topic, NodeHandle nodeHandle, ISubscriptionCallbackHelper cb) : base(topic)
 {
     // TODO: Complete member initialization
     this.topic = topic;
     nodehandle = new NodeHandle(nodeHandle);
     helper     = cb;
 }
Beispiel #3
0
 public IMessageDeserializer MakeDeserializer(MsgTypes type, ISubscriptionCallbackHelper helper, IRosMessage m,
                                              IDictionary connection_header)
 {
     if (type == MsgTypes.Unknown)
     {
         return(null);
     }
     //return ROS.MakeDeserializer(ROS.MakeMessage(type));
     return
         ((IMessageDeserializer)
          Activator.CreateInstance(
              typeof(MessageDeserializer <>).MakeGenericType(
                  ROS.MakeMessage(type).GetType()), helper, m, connection_header));
 }
Beispiel #4
0
 public void removeCallback(ISubscriptionCallbackHelper helper)
 {
     lock (callbacks_mutex)
     {
         foreach (ICallbackInfo info in callbacks)
         {
             if (info.helper == helper)
             {
                 info.subscription_queue.clear();
                 info.callback.removeByID(info.Get());
                 callbacks.Remove(info);
                 //if (!helper.isConst())
                 --nonconst_callbacks;
                 break;
             }
         }
     }
 }
Beispiel #5
0
        public bool unsubscribe(string topic, ISubscriptionCallbackHelper sbch)
        {
            Subscription sub = null;

            lock (subs_mutex)
            {
                if (shutting_down)
                {
                    return(false);
                }
                foreach (Subscription s in subscriptions)
                {
                    if (s.name == topic)
                    {
                        sub = s;
                        break;
                    }
                }
            }
            if (sub == null)
            {
                return(false);
            }
            sub.removeCallback(sbch);
            if (sub.NumCallbacks == 0)
            {
                lock (subs_mutex)
                {
                    subscriptions.Remove(sub);

                    if (!unregisterSubscriber(topic))
                    {
                        EDB.WriteLine("Couldn't unregister subscriber for topic [" + topic + "]");
                    }
                }

                sub.shutdown();
                return(true);
            }
            return(true);
        }
        public override void pushitgood(ISubscriptionCallbackHelper helper, IMessageDeserializer deserializer, bool nonconst_need_copy, ref bool was_full, TimeData receipt_time)
        {
            lock (queue_mutex)
            {
                if (was_full)
                {
                    was_full = false;
                }
                if (fullNoLock())
                {
                    queue.Dequeue();
                    --queue_size;

                    _full = true;
                    if (was_full)
                    {
                        was_full = true;
                    }
                }
                else
                {
                    _full = false;
                }

                Item i = new Item
                {
                    helper             = helper,
                    deserializer       = deserializer,
                    nonconst_need_copy = nonconst_need_copy,
                    receipt_time       = receipt_time
                };
                queue.Enqueue(i);

                ++queue_size;
            }
        }
 public IMessageDeserializer(ISubscriptionCallbackHelper helper, IRosMessage m, IDictionary connection_header)
 {
     this.helper            = helper;
     message                = m;
     this.connection_header = connection_header;
 }
Beispiel #8
0
 public virtual void pushitgood(ISubscriptionCallbackHelper helper, IRosMessage msg, bool nonconst_need_copy, ref bool was_full, TimeData receipt_time)
 {
     throw new NotImplementedException();
 }