Class: Orocos::Async::Log::OutputReader

Inherits:
ObjectBase
  • Object
show all
Extended by:
ObjectBase::Periodic::ClassMethods, Utilrb::EventLoop::Forwardable
Includes:
ObjectBase::Periodic
Defined in:
lib/orocos/async/log/ports.rb

Instance Attribute Summary collapse

Attributes included from ObjectBase::Periodic::ClassMethods

#default_period

Attributes inherited from ObjectBase

#emitting, #event_loop, #name, #options, #pending_adds

Instance Method Summary collapse

Methods included from ObjectBase::Periodic

#default_period, #period, #period=

Methods inherited from ObjectBase

#add_listener, define_event, define_events, #disable_emitting, #event, event_names, #event_names, #invalidate_delegator!, #listener?, #listeners, #number_of_listeners, #on_event, #proxy_event, #reachable!, #reachable?, #remove_all_listeners, #remove_listener, #remove_proxy_event, #unreachable!, #valid_delegator?, valid_event?, #valid_event?, validate_event, #validate_event, #wait

Constructor Details

#initialize(port, reader, options = Hash.new) ⇒ OutputReader

Returns a new instance of OutputReader

Parameters:

  • port (Async::OutputPort)

    The Asyn::OutputPort

  • reader (Orocos::OutputReader)

    The designated reader



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/orocos/async/log/ports.rb', line 15

def initialize(port,reader,options=Hash.new)
    super(port.name,port.event_loop)
    @options = Kernel.validate_options options, :period => default_period
    @port = port
    # do not queue reachable event no listeners are registered so far
    disable_emitting do 
        reachable! reader
    end
    @port.connect_to do |sample|
        emit_raw_data @delegator_obj.raw_read
        # TODO just emit raw_data and convert it to ruby
        # if someone is listening to (see PortProxy)
        emit_data sample
    end
end

Instance Attribute Details

#policyObject (readonly)

Returns the value of attribute policy



9
10
11
# File 'lib/orocos/async/log/ports.rb', line 9

def policy
  @policy
end

#portObject (readonly)

Returns the value of attribute port



10
11
12
# File 'lib/orocos/async/log/ports.rb', line 10

def port
  @port
end

Instance Method Details

#really_add_listener(listener) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/orocos/async/log/ports.rb', line 31

def really_add_listener(listener)
    return super unless listener.use_last_value?

    if listener.event == :raw_data
        sample = @delegator_obj.raw_read
        if sample
            event_loop.once do
                listener.call sample
            end
        end
    elsif listener.event == :data
        sample = @delegator_obj.read
        if sample
            event_loop.once do
                listener.call sample
            end
        end
    end
    super
end