class Orocos::Async::NameServiceBase
Attributes
task_context_proxies[R]
Public Class Methods
new(name_service,options = Hash.new)
click to toggle source
Calls superclass method
# File lib/orocos/async/name_service.rb, line 53 def initialize(name_service,options = Hash.new) @options ||= Kernel.validate_options options,:period => default_period,:start => false,:sync_key => nil,:known_errors => Orocos::Async::KNOWN_ERRORS,:event_loop => Orocos::Async.event_loop @stored_names ||= Set.new _,options_async = Kernel.filter_options @options,:event_loop=>nil super(name_service.name,@options[:event_loop]) disable_emitting do reachable! name_service end @watchdog_timer = @event_loop.async_every method(:names),options_async do |names| names.each do |name| n = @stored_names.add? name event :task_added,name if n end @stored_names.delete_if do |name| if !names.include?(name) event :task_removed,name true else false end end end @watchdog_timer.doc = name @task_context_proxies = Array.new end
Public Instance Methods
proxy(name,options = Hash.new)
click to toggle source
# File lib/orocos/async/name_service.rb, line 99 def proxy(name,options = Hash.new) name = if name.respond_to?(:name) name.name else name end options[:event_loop] ||= @event_loop options[:name_service] ||= self ns,base_name = split_name(name) ns ||= "" task = @task_context_proxies.find do |t| ns2,base_name2= split_name(t.name) ns2 ||= "" ns == ns2 && base_name == base_name2 && t.event_loop == options[:event_loop] && t.name_service == options[:name_service] end if task options.each_pair do |key,value| if task.options[key] != value # TODO add proper pretty_print methods to display options otherwise console will be flooded Orocos.warn "TaskContextProxy #{name} is already initialized with different options." # Orocos.warn "Ignoring options: #{options}." break end end task else @task_context_proxies << Orocos::Async::TaskContextProxy.new(name,options) @task_context_proxies.last end end
really_add_listener(listener)
click to toggle source
Calls superclass method
# File lib/orocos/async/name_service.rb, line 79 def really_add_listener(listener) if listener.event == :task_added || listener.event == :task_removed @watchdog_timer.start unless @watchdog_timer.running? if listener.use_last_value? && !@stored_names.empty? @stored_names.each do |name| listener.call name end end end super end
remove_listener(listener)
click to toggle source
Calls superclass method
# File lib/orocos/async/name_service.rb, line 91 def remove_listener(listener) super if number_of_listeners(:task_removed) == 0 && number_of_listeners(:task_added) == 0 @watchdog_timer.cancel @stored_names.clear end end