class Orocos::Async::CORBA::OutputPort
Public Class Methods
new(async_task,port,options=Hash.new)
click to toggle source
Calls superclass method
Orocos::Async::CORBA::Port.new
# File lib/orocos/async/ports.rb, line 246 def initialize(async_task,port,options=Hash.new) super @readers = Array.new end
Public Instance Methods
add_listener(listener)
click to toggle source
Calls superclass method
Orocos::Async::ObjectBase#add_listener
# File lib/orocos/async/ports.rb, line 343 def add_listener(listener) super if((listener.event == :data || listener.event == :raw_data) && !@global_reader) # Errors during reader creation are reported on the port. Do # #on_error on the port to get them reader(@options) do |reader| if @global_reader # We created multiple readers because of concurrency. # Just ignore this one reader.disconnect elsif number_of_listeners(:data) > 0 || number_of_listeners(:raw_data) > 0 # The listener might already have been removed ! @global_reader = reader proxy_event(reader,:data,:raw_data) @global_reader.period = @options[:period] if @options.has_key? :period end end end end
last_sample()
click to toggle source
# File lib/orocos/async/ports.rb, line 251 def last_sample @global_reader.last_sample if @global_reader end
on_data(policy = Hash.new,&block)
click to toggle source
# File lib/orocos/async/ports.rb, line 287 def on_data(policy = Hash.new,&block) @options = if policy.empty? @options elsif @options.empty? && !@global_reader policy elsif @options == policy @options else Orocos.warn "Changing global reader policy for #{full_name} from #{@options} to #{policy}" self.options = @options @options end on_event :data,&block end
on_raw_data(policy = Hash.new,&block)
click to toggle source
# File lib/orocos/async/ports.rb, line 302 def on_raw_data(policy = Hash.new,&block) @options = if policy.empty? @options elsif @options.empty? && !@global_reader policy elsif @options == policy @options else Orocos.warn "Changing global reader policy for #{full_name} from #{@options} to #{policy}" self.options = @options @options end on_event :raw_data,&block end
options=(options)
click to toggle source
Calls superclass method
# File lib/orocos/async/ports.rb, line 259 def options=(options) super @global_reader = nil end
period=(value)
click to toggle source
# File lib/orocos/async/ports.rb, line 317 def period=(value) @period = value @global_reader.period = value if @global_reader.respond_to?(:period=) end
raw_last_sample()
click to toggle source
# File lib/orocos/async/ports.rb, line 255 def raw_last_sample @global_reader.raw_last_sample if @global_reader end
reachable!(port,options = Hash.new)
click to toggle source
Calls superclass method
Orocos::Async::CORBA::Port#reachable!
# File lib/orocos/async/ports.rb, line 378 def reachable!(port,options = Hash.new) super if @global_reader orig_reader(@global_reader.policy) do |reader,error| unless error @global_reader.reachable!(reader) end end end end
reader(options = Hash.new,&block)
click to toggle source
# File lib/orocos/async/ports.rb, line 264 def reader(options = Hash.new,&block) options, policy = Kernel.filter_options options, :period => nil policy[:init] = true unless policy.has_key?(:init) policy[:pull] = true unless policy.has_key?(:pull) if block orig_reader(policy) do |reader,error| unless error reader = OutputReader.new(self,reader,options) proxy_event(reader,:error) end if block.arity == 2 block.call(reader,error) elsif !error block.call(reader) end end else reader = OutputReader.new(self,orig_reader(policy),options) proxy_event(reader,:error) reader end end
really_add_listener(listener)
click to toggle source
Calls superclass method
Orocos::Async::ObjectBase#really_add_listener
# File lib/orocos/async/ports.rb, line 322 def really_add_listener(listener) super if listener.event == :data if @global_reader if listener.use_last_value? if sample = @global_reader.last_sample listener.call sample end end end elsif listener.event == :raw_data if @global_reader if listener.use_last_value? if sample = @global_reader.raw_last_sample listener.call sample end end end end end
remove_listener(listener)
click to toggle source
Calls superclass method
Orocos::Async::ObjectBase#remove_listener
# File lib/orocos/async/ports.rb, line 362 def remove_listener(listener) super if number_of_listeners(:data) == 0 && number_of_listeners(:raw_data) == 0 && @global_reader remove_proxy_event(@global_reader) @global_reader.disconnect{} # call it asynchron @global_reader = nil end end
unreachable!(options = Hash.new)
click to toggle source
Calls superclass method
Orocos::Async::CORBA::Port#unreachable!
# File lib/orocos/async/ports.rb, line 371 def unreachable!(options = Hash.new) if @global_reader.respond_to?(:unreachable!) @global_reader.unreachable! end super end